Files
IL-GSC/GHOSTS/PC/MP/maps/mp/killstreaks/_deployablebox.gsc
2023-10-27 03:49:01 -04:00

776 lines
16 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_deployablebox.gsc
* Game: Call of Duty: Ghosts
* Platform: PC
* Function Count: 41
* Decompile Time: 733 ms
* Timestamp: 10/27/2023 1:20:34 AM
*******************************************************************/
//Function Number: 1
func_44DF()
{
if(!isdefined(level.boxsettings))
{
level.boxsettings = [];
}
}
//Function Number: 2
func_13F5(param_00,param_01)
{
thread watchdeployablemarkercancel(param_01);
thread func_8CD8(param_01,param_00);
for(;;)
{
var_02 = common_scripts\utility::func_8B33("deployable_canceled","deployable_deployed","death","disconnect");
return var_02 == "deployable_deployed";
}
}
//Function Number: 3
func_842D(param_00,param_01)
{
thread watchdeployablemarkercancel(param_01);
thread func_8CD8(param_01,param_00);
for(;;)
{
var_02 = common_scripts\utility::func_8B33("deployable_canceled","deployable_deployed","death","disconnect");
return var_02 == "deployable_deployed";
}
}
//Function Number: 4
watchdeployablemarkercancel(param_00)
{
self endon("death");
self endon("disconnect");
self endon("deployable_deployed");
var_01 = level.boxsettings[param_00];
var_02 = self getcurrentweapon();
while(var_02 == var_01.weaponinfo)
{
self waittill("weapon_change",var_02);
}
self notify("deployable_canceled");
}
//Function Number: 5
func_8CD8(param_00,param_01)
{
self endon("spawned_player");
self endon("disconnect");
self endon("deployable_canceled");
for(;;)
{
self waittill("grenade_fire",var_02,var_03);
if(maps\mp\_utility::func_4945(self))
{
break;
}
else
{
var_02 delete();
}
}
var_02 makecollidewithitemclip(1);
self notify("deployable_deployed");
var_02.owner = self;
var_02.weaponname = var_03;
self.marker = var_02;
var_02 playsoundtoplayer(level.boxsettings[param_00].deployedsfx,self);
var_02 thread func_50A8(param_01,param_00,::box_setactive);
}
//Function Number: 6
func_5A7E(param_00)
{
self notify("death");
}
//Function Number: 7
func_50A8(param_00,param_01,param_02)
{
self notify("markerActivate");
self endon("markerActivate");
self waittill("missile_stuck");
var_03 = self.owner;
var_04 = self.origin;
if(!isdefined(var_03))
{
}
var_05 = func_20CB(param_01,var_04,var_03);
var_06 = spawnstruct();
var_06.linkparent = self getlinkedparent();
if(isdefined(var_06.linkparent) && isdefined(var_06.linkparent.model) && deployableexclusion(var_06.linkparent.model))
{
var_05.origin = var_06.linkparent.origin;
var_07 = var_06.linkparent getlinkedparent();
if(isdefined(var_07))
{
var_06.linkparent = var_07;
}
else
{
var_06.linkparent = undefined;
}
}
var_06.deathoverridecallback = ::func_5A7E;
var_05 thread maps\mp\_movers::func_3F25(var_06);
var_05.moving_platform = var_06.linkparent;
var_05 setotherent(var_03);
wait(0.05);
var_05 thread [[ param_02 ]]();
self delete();
if(isdefined(var_05) && var_05 maps\mp\_utility::func_818D())
{
var_05 notify("death");
}
}
//Function Number: 8
deployableexclusion(param_00)
{
if(param_00 == "mp_satcom")
{
return 1;
}
else if(issubstr(param_00,"paris_catacombs_iron"))
{
return 1;
}
else if(issubstr(param_00,"mp_warhawk_iron_gate"))
{
return 1;
}
return 0;
}
//Function Number: 9
func_48D7()
{
var_00 = self getcurrentweapon();
if(isdefined(var_00))
{
foreach(var_02 in level.boxsettings)
{
if(var_00 == var_02.weaponinfo)
{
return 1;
}
}
}
return 0;
}
//Function Number: 10
func_20CB(param_00,param_01,param_02)
{
var_03 = level.boxsettings[param_00];
var_04 = spawn("script_model",param_01 - (0,0,1));
var_04 setmodel(var_03.modelbase);
var_04.health = 999999;
var_04.maxhealth = var_03.maxhealth;
var_04.angles = param_02.angles;
var_04.boxtype = param_00;
var_04.owner = param_02;
var_04.team = param_02.team;
var_04.id = var_03.id;
if(isdefined(var_03.dpadname))
{
var_04.dpadname = var_03.dpadname;
}
if(isdefined(var_03.maxuses))
{
var_04.usesremaining = var_03.maxuses;
}
var_04 box_setinactive();
var_04 thread box_handleownerdisconnect();
var_04 addboxtolevelarray();
return var_04;
}
//Function Number: 11
box_setactive(param_00)
{
self setcursorhint("HINT_NOICON");
var_01 = level.boxsettings[self.boxtype];
self sethintstring(var_01.hintstring);
self.inuse = 0;
var_02 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_02,"invisible",(0,0,0));
if(!isdefined(self getlinkedparent()))
{
objective_position(var_02,self.origin);
}
else
{
objective_onentity(var_02,self);
}
objective_state(var_02,"active");
objective_icon(var_02,var_01.shadername);
self.objidfriendly = var_02;
if(level.teambased)
{
objective_team(var_02,self.team);
foreach(var_04 in level.players)
{
if(self.team == var_04.team && !isdefined(var_01.canusecallback) || var_04 [[ var_01.canusecallback ]](self))
{
box_seticon(var_04,var_01.streakname,var_01.headiconoffset);
}
}
}
else
{
objective_player(var_02,self.owner getentitynumber());
if(!isdefined(var_01.canusecallback) || self.owner [[ var_01.canusecallback ]](self))
{
box_seticon(self.owner,var_01.streakname,var_01.headiconoffset);
}
}
self makeusable();
self.isusable = 1;
self setcandamage(1);
thread box_handledamage();
thread box_handledeath();
thread func_16FE();
thread disablewhenjuggernaut();
common_scripts\utility::func_5009(self.team,1);
if(issentient(self))
{
self setthreatbiasgroup("DogsDontAttack");
}
if(isdefined(self.owner))
{
self.owner notify("new_deployable_box",self);
}
if(level.teambased)
{
foreach(var_04 in level.participants)
{
_box_setactivehelper(var_04,self.team == var_04.team,var_01.canusecallback);
if(!isai(var_04))
{
thread box_playerjoinedteam(var_04);
}
}
}
else
{
foreach(var_04 in level.participants)
{
_box_setactivehelper(var_04,isdefined(self.owner) && self.owner == var_04,var_01.canusecallback);
}
}
level thread maps\mp\_utility::func_7FA0(var_01.splashname,self.owner,self.team);
thread func_16F8();
thread box_agentconnected();
if(isdefined(var_01.ondeploycallback))
{
self [[ var_01.ondeploycallback ]](var_01);
}
thread createbombsquadmodel(self.boxtype);
}
//Function Number: 12
_box_setactivehelper(param_00,param_01,param_02)
{
if(param_01)
{
if(!isdefined(param_02) || param_00 [[ param_02 ]](self))
{
box_enableplayeruse(param_00);
}
else
{
box_disableplayeruse(param_00);
thread func_2A28(param_00);
}
thread boxthink(param_00);
}
box_disableplayeruse(param_00);
}
//Function Number: 13
func_16F8()
{
self endon("death");
for(;;)
{
level waittill("connected",var_00);
childthread func_16FF(var_00);
}
}
//Function Number: 14
box_agentconnected()
{
self endon("death");
for(;;)
{
level waittill("spawned_agent_player",var_00);
func_16ED(var_00);
}
}
//Function Number: 15
func_16FF(param_00)
{
param_00 waittill("spawned_player");
if(level.teambased)
{
func_16ED(param_00);
thread box_playerjoinedteam(param_00);
}
}
//Function Number: 16
box_playerjoinedteam(param_00)
{
self endon("death");
param_00 endon("disconnect");
for(;;)
{
param_00 waittill("joined_team");
if(level.teambased)
{
func_16ED(param_00);
}
}
}
//Function Number: 17
func_16ED(param_00)
{
if(self.team == param_00.team)
{
box_enableplayeruse(param_00);
thread boxthink(param_00);
box_seticon(param_00,level.boxsettings[self.boxtype].streakname,level.boxsettings[self.boxtype].headiconoffset);
}
box_disableplayeruse(param_00);
maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0));
}
//Function Number: 18
box_seticon(param_00,param_01,param_02)
{
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\_utility::getkillstreakoverheadicon(param_01),(0,0,param_02),14,14,undefined,undefined,undefined,undefined,undefined,0);
}
//Function Number: 19
box_enableplayeruse(param_00)
{
if(isplayer(param_00))
{
self enableplayeruse(param_00);
}
self.disabled_use_for[param_00 getentitynumber()] = 0;
}
//Function Number: 20
box_disableplayeruse(param_00)
{
if(isplayer(param_00))
{
self disableplayeruse(param_00);
}
self.disabled_use_for[param_00 getentitynumber()] = 1;
}
//Function Number: 21
box_setinactive()
{
self makeunusable();
self.isusable = 0;
maps\mp\_entityheadicons::setheadicon("none","",(0,0,0));
if(isdefined(self.objidfriendly))
{
maps\mp\_utility::_objective_delete(self.objidfriendly);
}
}
//Function Number: 22
box_handledamage()
{
var_00 = level.boxsettings[self.boxtype];
maps\mp\gametypes\_damage::func_537B(var_00.maxhealth,var_00.damagefeedback,::box_handledeathdamage,::func_16F7,1);
}
//Function Number: 23
func_16F7(param_00,param_01,param_02,param_03)
{
var_04 = param_03;
var_05 = level.boxsettings[self.boxtype];
if(var_05.allowmeleedamage)
{
var_04 = maps\mp\gametypes\_damage::handlemeleedamage(param_01,param_02,var_04);
}
var_04 = maps\mp\gametypes\_damage::func_3F8A(param_01,param_02,var_04);
var_04 = maps\mp\gametypes\_damage::handlegrenadedamage(param_01,param_02,var_04);
var_04 = maps\mp\gametypes\_damage::handleapdamage(param_01,param_02,var_04,param_00);
return var_04;
}
//Function Number: 24
box_handledeathdamage(param_00,param_01,param_02,param_03)
{
var_04 = level.boxsettings[self.boxtype];
var_05 = maps\mp\gametypes\_damage::onkillstreakkilled(param_00,param_01,param_02,param_03,var_04.xppopup,var_04.vodestroyed);
if(var_05)
{
param_00 notify("destroyed_equipment");
}
}
//Function Number: 25
box_handledeath()
{
self waittill("death");
if(!isdefined(self))
{
}
box_setinactive();
func_657F();
var_00 = level.boxsettings[self.boxtype];
playfx(var_00.deathvfx,self.origin);
self playsound("mp_killstreak_disappear");
if(isdefined(var_00.deathdamagemax))
{
var_01 = undefined;
if(isdefined(self.owner))
{
var_01 = self.owner;
}
radiusdamage(self.origin + (0,0,var_00.headiconoffset),var_00.deathdamageradius,var_00.deathdamagemax,var_00.deathdamagemin,var_01,"MOD_EXPLOSIVE",var_00.deathweaponinfo);
}
self notify("deleting");
self delete();
}
//Function Number: 26
box_handleownerdisconnect()
{
self endon("death");
level endon("game_ended");
self notify("box_handleOwner");
self endon("box_handleOwner");
self.owner waittill("killstreak_disowned");
self notify("death");
}
//Function Number: 27
boxthink(param_00)
{
self endon("death");
thread func_1700(param_00);
if(!isdefined(param_00.boxes))
{
param_00.boxes = [];
}
param_00.boxes[param_00.boxes.size] = self;
var_01 = level.boxsettings[self.boxtype];
for(;;)
{
self waittill("captured",var_02);
if(var_02 == param_00)
{
param_00 playlocalsound(var_01.onusesfx);
if(isdefined(var_01.onusecallback))
{
param_00 [[ var_01.onusecallback ]](self);
}
if(isdefined(self.owner) && param_00 != self.owner)
{
self.owner thread maps\mp\gametypes\_rank::func_8E6E(var_01.event);
self.owner thread maps\mp\gametypes\_rank::giverankxp("support",var_01.usexp);
}
if(isdefined(self.usesremaining))
{
self.usesremaining--;
if(self.usesremaining == 0)
{
func_16F5();
break;
}
}
if(isdefined(var_01.canuseotherboxes) && var_01.canuseotherboxes)
{
foreach(var_04 in level.deployable_box[var_01.streakname])
{
var_04 box_disableplayeruse(self);
var_04 maps\mp\_entityheadicons::setheadicon(self,"",(0,0,0));
var_04 thread func_2A28(self);
}
continue;
}
maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0));
box_disableplayeruse(param_00);
thread func_2A28(param_00);
}
}
}
//Function Number: 28
func_2A28(param_00)
{
self endon("death");
param_00 endon("disconnect");
param_00 waittill("death");
if(level.teambased)
{
if(self.team == param_00.team)
{
box_seticon(param_00,level.boxsettings[self.boxtype].streakname,level.boxsettings[self.boxtype].headiconoffset);
box_enableplayeruse(param_00);
}
}
if(isdefined(self.owner) && self.owner == param_00)
{
box_seticon(param_00,level.boxsettings[self.boxtype].streakname,level.boxsettings[self.boxtype].headiconoffset);
box_enableplayeruse(param_00);
}
}
//Function Number: 29
func_1700(param_00)
{
level endon("game_ended");
while(isdefined(self))
{
self waittill("trigger",var_01);
if(isdefined(level.boxsettings[self.boxtype].nousekillstreak) && level.boxsettings[self.boxtype].nousekillstreak && maps\mp\_utility::func_48F7(param_00 getcurrentweapon()))
{
continue;
}
if(var_01 == param_00 && func_87BF(param_00,level.boxsettings[self.boxtype].usetime))
{
self notify("captured",param_00);
}
}
}
//Function Number: 30
func_48CB(param_00)
{
return level.teambased && self.team == param_00.team;
}
//Function Number: 31
func_16FE()
{
self endon("death");
level endon("game_ended");
var_00 = level.boxsettings[self.boxtype];
var_01 = var_00.lifespan;
maps\mp\gametypes\_hostmigration::func_8B0D(var_01);
if(isdefined(var_00.vogone))
{
self.owner thread maps\mp\_utility::func_4D35(var_00.vogone);
}
func_16F5();
}
//Function Number: 32
func_16F5()
{
wait(0.05);
self notify("death");
}
//Function Number: 33
func_2591(param_00)
{
wait(0.25);
self linkto(param_00,"tag_origin",(0,0,0),(0,0,0));
param_00 waittill("death");
func_16F5();
}
//Function Number: 34
box_modelteamupdater(param_00)
{
self endon("death");
self hide();
foreach(var_02 in level.players)
{
if(var_02.team == param_00)
{
self showtoplayer(var_02);
}
}
for(;;)
{
level waittill("joined_team");
self hide();
foreach(var_02 in level.players)
{
if(var_02.team == param_00)
{
self showtoplayer(var_02);
}
}
}
}
//Function Number: 35
func_87BF(param_00,param_01)
{
maps\mp\_movers::script_mover_link_to_use_object(param_00);
param_00 common_scripts\utility::_disableweapon();
param_00.boxparams = spawnstruct();
param_00.boxparams.curprogress = 0;
param_00.boxparams.inuse = 1;
param_00.boxparams.userate = 0;
param_00.boxparams.id = self.id;
if(isdefined(param_01))
{
param_00.boxparams.usetime = param_01;
}
else
{
param_00.boxparams.usetime = 3000;
}
var_02 = useholdthinkloop(param_00);
if(isalive(param_00))
{
param_00 common_scripts\utility::_enableweapon();
maps\mp\_movers::script_mover_unlink_from_use_object(param_00);
}
if(!isdefined(self))
{
return 0;
}
param_00.boxparams.inuse = 0;
param_00.boxparams.curprogress = 0;
return var_02;
}
//Function Number: 36
useholdthinkloop(param_00)
{
var_01 = param_00.boxparams;
while(param_00 func_92B0(var_01))
{
if(!param_00 maps\mp\_movers::script_mover_use_can_link(self))
{
param_00 maps\mp\gametypes\_gameobjects::func_874E(var_01,0);
return 0;
}
var_01.curprogress = var_01.curprogress + 50 * var_01.userate;
if(isdefined(param_00.objectivescaler))
{
var_01.userate = 1 * param_00.objectivescaler;
}
else
{
var_01.userate = 1;
}
param_00 maps\mp\gametypes\_gameobjects::func_874E(var_01,1);
if(var_01.curprogress >= var_01.usetime)
{
param_00 maps\mp\gametypes\_gameobjects::func_874E(var_01,0);
return maps\mp\_utility::func_4945(param_00);
}
wait(0.05);
}
param_00 maps\mp\gametypes\_gameobjects::func_874E(var_01,0);
return 0;
}
//Function Number: 37
disablewhenjuggernaut()
{
level endon("game_ended");
self endon("death");
for(;;)
{
level waittill("juggernaut_equipped",var_00);
maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0));
box_disableplayeruse(var_00);
thread func_2A28(var_00);
}
}
//Function Number: 38
addboxtolevelarray()
{
level.deployable_box[self.boxtype][self getentitynumber()] = self;
}
//Function Number: 39
func_657F()
{
level.deployable_box[self.boxtype][self getentitynumber()] = undefined;
}
//Function Number: 40
createbombsquadmodel(param_00)
{
var_01 = level.boxsettings[param_00];
if(isdefined(var_01.modelbombsquad))
{
var_02 = spawn("script_model",self.origin);
var_02.angles = self.angles;
var_02 hide();
var_02 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(self.owner);
var_02 setmodel(var_01.modelbombsquad);
var_02 linkto(self);
var_02 setcontents(0);
self.bombsquadmodel = var_02;
self waittill("death");
if(isdefined(var_02))
{
var_02 delete();
self.bombsquadmodel = undefined;
}
}
}
//Function Number: 41
func_92B0(param_00)
{
return !level.gameended && isdefined(param_00) && maps\mp\_utility::func_4945(self) && self usebuttonpressed() && !self isonladder() && !self meleebuttonpressed() && !isdefined(self.throwinggrenade) && param_00.curprogress < param_00.usetime && !isdefined(self.teleporting) || !self.teleporting;
}