Files
IL-GSC/MW3/PC/MP/maps/mp/killstreaks/_deployablebox.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

755 lines
17 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_deployablebox.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 28
* Decompile Time: 508 ms
* Timestamp: 10/27/2023 2:13:57 AM
*******************************************************************/
//Function Number: 1
init()
{
level.killstreakfuncs["deployable_vest"] = ::tryusedeployablevest;
level.boxsettings = [];
level.boxsettings["deployable_vest"] = spawnstruct();
level.boxsettings["deployable_vest"].weaponinfo = "deployable_vest_marker_mp";
level.boxsettings["deployable_vest"].modelbase = "com_deploy_ballistic_vest_friend_world";
level.boxsettings["deployable_vest"].hintstring = &"MP_LIGHT_ARMOR_PICKUP";
level.boxsettings["deployable_vest"].capturingstring = &"MP_BOX_GETTING_VEST";
level.boxsettings["deployable_vest"].eventstring = &"MP_DEPLOYED_VEST";
level.boxsettings["deployable_vest"].streakname = "deployable_vest";
level.boxsettings["deployable_vest"].splashname = "used_deployable_vest";
level.boxsettings["deployable_vest"].shadername = "compass_objpoint_deploy_friendly";
level.boxsettings["deployable_vest"].lifespan = 60;
level.boxsettings["deployable_vest"].xp = 50;
level.boxsettings["deployable_vest"].vodestroyed = "ballistic_vest_destroyed";
foreach(var_01 in level.boxsettings)
{
precacheitem(var_01.weaponinfo);
precachemodel(var_01.modelbase);
precachestring(var_01.hintstring);
precachestring(var_01.capturingstring);
precachestring(var_01.eventstring);
precacheshader(var_01.shadername);
}
precachestring(&"PLATFORM_HOLD_TO_USE");
level._effect["box_explode_mp"] = loadfx("fire/ballistic_vest_death");
}
//Function Number: 2
tryusedeployablevest(param_00)
{
var_01 = begindeployableviamarker(param_00,"deployable_vest");
if(!isdefined(var_01) || !var_01)
{
return 0;
}
maps\mp\_matchdata::logkillstreakevent("deployable_vest",self.origin);
return 1;
}
//Function Number: 3
begindeployableviamarker(param_00,param_01)
{
self endon("death");
self.marker = undefined;
thread watchmarkerusage(param_00,param_01);
var_02 = self getcurrentweapon();
if(ismarker(var_02))
{
var_03 = var_02;
}
else
{
var_03 = undefined;
}
while(ismarker(var_02))
{
self waittill("weapon_change",var_02);
if(ismarker(var_02))
{
var_03 = var_02;
}
}
self notify("stopWatchingMarker");
if(!isdefined(var_03))
{
return 0;
}
return !self getammocount(var_03) && self hasweapon(var_03);
}
//Function Number: 4
watchmarkerusage(param_00,param_01)
{
self notify("watchMarkerUsage");
self endon("death");
self endon("disconnect");
self endon("watchMarkerUsage");
self endon("stopWatchingMarker");
thread watchmarker(param_00,param_01);
for(;;)
{
self waittill("grenade_pullback",var_02);
if(!ismarker(var_02))
{
continue;
}
common_scripts\utility::_disableusability();
beginmarkertracking();
}
}
//Function Number: 5
watchmarker(param_00,param_01)
{
self notify("watchMarker");
self endon("watchMarker");
self endon("spawned_player");
self endon("disconnect");
self endon("stopWatchingMarker");
for(;;)
{
self waittill("grenade_fire",var_02,var_03);
if(!ismarker(var_03))
{
continue;
}
if(!isalive(self))
{
var_02 delete();
return;
}
var_02.owner = self;
var_02.weaponname = var_03;
self.marker = var_02;
thread takeweapononstuck(var_02,var_03);
var_02 thread markeractivate(param_00,param_01,::box_setactive);
}
}
//Function Number: 6
takeweapononstuck(param_00,param_01)
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
param_00 playsoundtoplayer("mp_vest_deployed_ui",self);
if(self hasweapon(param_01))
{
self takeweapon(param_01);
self switchtoweapon(common_scripts\utility::getlastweapon());
}
}
//Function Number: 7
beginmarkertracking()
{
self notify("beginMarkerTracking");
self endon("beginMarkerTracking");
self endon("death");
self endon("disconnect");
common_scripts\utility::waittill_any("grenade_fire","weapon_change");
common_scripts\utility::_enableusability();
}
//Function Number: 8
markeractivate(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))
{
return;
}
var_05 = createboxforplayer(param_01,var_04,var_03);
wait 0.05;
var_05 thread [[ param_02 ]]();
self delete();
}
//Function Number: 9
ismarker(param_00)
{
switch(param_00)
{
case "deployable_vest_marker_mp":
return 1;
default:
return 0;
}
}
//Function Number: 10
createboxforplayer(param_00,param_01,param_02)
{
var_03 = spawn("script_model",param_01);
var_03 setmodel(level.boxsettings[param_00].modelbase);
var_03.health = 1000;
var_03.angles = param_02.angles;
var_03.boxtype = param_00;
var_03.owner = param_02;
var_03.team = param_02.team;
var_03 box_setinactive();
var_03 thread box_handleownerdisconnect();
return var_03;
}
//Function Number: 11
box_setactive()
{
self setcursorhint("HINT_NOICON");
self sethintstring(level.boxsettings[self.boxtype].hintstring);
self.inuse = 0;
if(level.teambased)
{
var_00 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_00,"invisible",(0,0,0));
objective_position(var_00,self.origin);
objective_state(var_00,"active");
objective_icon(var_00,level.boxsettings[self.boxtype].shadername);
objective_team(var_00,self.team);
self.objidfriendly = var_00;
foreach(var_02 in level.players)
{
if(self.team == var_02.team && !var_02 maps\mp\_utility::isjuggernaut())
{
maps\mp\_entityheadicons::setheadicon(var_02,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
}
}
}
else
{
var_00 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add(var_00,"invisible",(0,0,0));
objective_position(var_00,self.origin);
objective_state(var_00,"active");
objective_icon(var_00,level.boxsettings[self.boxtype].shadername);
objective_player(var_00,self.owner getentitynumber());
self.objidfriendly = var_00;
if(!self.owner maps\mp\_utility::isjuggernaut())
{
maps\mp\_entityheadicons::setheadicon(self.owner,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
}
}
self makeusable();
self.isusable = 1;
self setcandamage(1);
thread box_handledamage();
thread box_handledeath();
thread box_timeout();
thread disablewhenjuggernaut();
foreach(var_02 in level.players)
{
if(level.teambased)
{
if(self.team == var_02.team)
{
if(var_02 maps\mp\_utility::isjuggernaut())
{
self disableplayeruse(var_02);
thread doubledip(var_02);
}
else
{
self enableplayeruse(var_02);
}
thread boxthink(var_02);
}
else
{
self disableplayeruse(var_02);
}
thread box_playerjoinedteam(var_02);
continue;
}
if(isdefined(self.owner) && self.owner == var_02)
{
if(var_02 maps\mp\_utility::isjuggernaut())
{
self disableplayeruse(var_02);
thread doubledip(var_02);
}
else
{
self enableplayeruse(var_02);
}
thread boxthink(var_02);
continue;
}
self disableplayeruse(var_02);
}
level thread maps\mp\_utility::teamplayercardsplash(level.boxsettings[self.boxtype].splashname,self.owner,self.team);
thread box_playerconnected();
}
//Function Number: 12
box_playerconnected()
{
self endon("death");
level waittill("connected",var_00);
var_00 waittill("spawned_player");
if(level.teambased)
{
if(self.team == var_00.team)
{
self enableplayeruse(var_00);
thread boxthink(var_00);
maps\mp\_entityheadicons::setheadicon(var_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
return;
}
self disableplayeruse(var_00);
maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0));
}
}
//Function Number: 13
box_playerjoinedteam(param_00)
{
self endon("death");
param_00 endon("disconnect");
for(;;)
{
param_00 waittill("joined_team");
if(level.teambased)
{
if(self.team == param_00.team)
{
self enableplayeruse(param_00);
thread boxthink(param_00);
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
continue;
}
self disableplayeruse(param_00);
maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0));
}
}
}
//Function Number: 14
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: 15
box_handledamage()
{
self.health = 999999;
self.maxhealth = 300;
self.damagetaken = 0;
for(;;)
{
self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_01))
{
continue;
}
if(isdefined(var_09))
{
switch(var_09)
{
case "flash_grenade_mp":
case "smoke_grenade_mp":
case "concussion_grenade_mp":
break;
}
}
if(!isdefined(self))
{
return;
}
if(var_04 == "MOD_MELEE")
{
self.damagetaken = self.damagetaken + self.maxhealth;
}
if(isdefined(var_08) && var_08 & level.idflags_penetration)
{
self.wasdamagedfrombulletpenetration = 1;
}
self.wasdamaged = 1;
var_0A = var_00;
if(isplayer(var_01))
{
var_01 maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag");
if(var_04 == "MOD_RIFLE_BULLET" || var_04 == "MOD_PISTOL_BULLET")
{
if(var_01 maps\mp\_utility::_hasperk("specialty_armorpiercing"))
{
var_0A = var_0A + var_00 * level.armorpiercingmod;
}
}
}
if(isdefined(var_01.owner) && isplayer(var_01.owner))
{
var_01.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback("deployable_bag");
}
if(isdefined(var_09))
{
switch(var_09)
{
case "javelin_mp":
case "stinger_mp":
case "remote_mortar_missile_mp":
case "remotemissile_projectile_mp":
case "ac130_40mm_mp":
case "ac130_105mm_mp":
self.var_30C8 = 1;
var_0A = self.maxhealth + 1;
break;
case "stealth_bomb_mp":
case "artillery_mp":
self.var_30C8 = 0;
var_0A = var_0A + var_00 * 4;
break;
case "bomb_site_mp":
self.var_30C8 = 0;
var_0A = self.maxhealth + 1;
break;
}
}
self.damagetaken = self.damagetaken + var_0A;
if(self.damagetaken >= self.maxhealth)
{
if(isplayer(var_01) && !isdefined(self.owner) || var_01 != self.owner)
{
var_01 thread maps\mp\gametypes\_rank::giverankxp("kill",100,var_09,var_04);
var_01 notify("destroyed_killstreak");
}
if(isdefined(self.owner))
{
self.owner thread maps\mp\_utility::leaderdialogonplayer(level.boxsettings[self.boxtype].vodestroyed);
}
self notify("death");
return;
}
}
}
//Function Number: 16
box_handledeath()
{
self waittill("death");
if(!isdefined(self))
{
return;
}
box_setinactive();
playfx(common_scripts\utility::getfx("box_explode_mp"),self.origin);
wait 0.5;
self notify("deleting");
self delete();
}
//Function Number: 17
box_handleownerdisconnect()
{
self endon("death");
level endon("game_ended");
self notify("box_handleOwner");
self endon("box_handleOwner");
self.owner common_scripts\utility::waittill_any("disconnect","joined_team","joined_spectators");
self notify("death");
}
//Function Number: 18
boxthink(param_00)
{
self endon("death");
thread boxcapturethink(param_00);
for(;;)
{
self waittill("captured",var_01);
if(var_01 != param_00)
{
continue;
}
switch(self.boxtype)
{
case "deployable_vest":
param_00 playlocalsound("ammo_crate_use");
param_00 [[ level.killstreakfuncs["light_armor"] ]]();
break;
}
if(isdefined(self.owner) && param_00 != self.owner)
{
self.owner thread maps\mp\gametypes\_rank::func_2F45(level.boxsettings[self.boxtype].eventstring);
self.owner thread maps\mp\gametypes\_rank::giverankxp("support",level.boxsettings[self.boxtype].xp);
}
maps\mp\_entityheadicons::setheadicon(param_00,"",(0,0,0));
self disableplayeruse(param_00);
thread doubledip(param_00);
}
}
//Function Number: 19
doubledip(param_00)
{
self endon("death");
param_00 endon("disconnect");
param_00 waittill("death");
if(level.teambased)
{
if(self.team == param_00.team)
{
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
self enableplayeruse(param_00);
return;
}
return;
}
if(isdefined(self.owner) && self.owner == param_00)
{
maps\mp\_entityheadicons::setheadicon(param_00,maps\mp\killstreaks\_killstreaks::getkillstreakcrateicon(level.boxsettings[self.boxtype].streakname),(0,0,20),14,14,undefined,undefined,undefined,undefined,undefined,0);
self enableplayeruse(param_00);
}
}
//Function Number: 20
boxcapturethink(param_00)
{
while(isdefined(self))
{
self waittill("trigger",var_01);
if(var_01 != param_00)
{
continue;
}
if(!useholdthink(param_00,2000))
{
continue;
}
self notify("captured",param_00);
}
}
//Function Number: 21
isfriendlytobox(param_00)
{
if(level.teambased && self.team == param_00.team)
{
return 1;
}
return 0;
}
//Function Number: 22
box_timeout()
{
self endon("death");
level endon("game_ended");
var_00 = level.boxsettings[self.boxtype].lifespan;
while(var_00)
{
wait 1;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if(!isdefined(self.carriedby))
{
var_00 = max(0,var_00 - 1);
}
}
self notify("death");
}
//Function Number: 23
deleteonownerdeath(param_00)
{
wait 0.25;
self linkto(param_00,"tag_origin",(0,0,0),(0,0,0));
param_00 waittill("death");
self delete();
}
//Function Number: 24
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: 25
useholdthink(param_00,param_01)
{
param_00 playerlinkto(self);
param_00 playerlinkedoffsetenable();
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;
if(isdefined(param_01))
{
param_00.boxparams.usetime = param_01;
}
else
{
param_00.boxparams.usetime = 3000;
}
param_00 thread personalusebar(self);
var_02 = useholdthinkloop(param_00);
if(isalive(param_00))
{
param_00 common_scripts\utility::_enableweapon();
param_00 unlink();
}
if(!isdefined(self))
{
return 0;
}
param_00.boxparams.inuse = 0;
param_00.boxparams.curprogress = 0;
return var_02;
}
//Function Number: 26
personalusebar(param_00)
{
self endon("disconnect");
var_01 = maps\mp\gametypes\_hud_util::createprimaryprogressbar(0,25);
var_02 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext(0,25);
var_02 settext(level.boxsettings[param_00.boxtype].capturingstring);
var_03 = -1;
while(maps\mp\_utility::isreallyalive(self) && isdefined(param_00) && self.boxparams.inuse && param_00.isusable && !level.gameended)
{
if(var_03 != self.boxparams.userate)
{
if(self.boxparams.curprogress > self.boxparams.usetime)
{
self.boxparams.curprogress = self.boxparams.usetime;
}
var_01 maps\mp\gametypes\_hud_util::updatebar(self.boxparams.curprogress / self.boxparams.usetime,1000 / self.boxparams.usetime * self.boxparams.userate);
if(!self.boxparams.userate)
{
var_01 maps\mp\gametypes\_hud_util::hideelem();
var_02 maps\mp\gametypes\_hud_util::hideelem();
}
else
{
var_01 maps\mp\gametypes\_hud_util::showelem();
var_02 maps\mp\gametypes\_hud_util::showelem();
}
}
var_03 = self.boxparams.userate;
wait 0.05;
}
var_01 maps\mp\gametypes\_hud_util::destroyelem();
var_02 maps\mp\gametypes\_hud_util::destroyelem();
}
//Function Number: 27
useholdthinkloop(param_00)
{
while(!level.gameended && isdefined(self) && maps\mp\_utility::isreallyalive(param_00) && param_00 usebuttonpressed() && param_00.boxparams.curprogress < param_00.boxparams.usetime)
{
param_00.boxparams.curprogress = param_00.boxparams.curprogress + 50 * param_00.boxparams.userate;
if(isdefined(param_00.objectivescaler))
{
param_00.boxparams.userate = 1 * param_00.objectivescaler;
}
else
{
param_00.boxparams.userate = 1;
}
if(param_00.boxparams.curprogress >= param_00.boxparams.usetime)
{
return maps\mp\_utility::isreallyalive(param_00);
}
wait 0.05;
}
return 0;
}
//Function Number: 28
disablewhenjuggernaut()
{
level endon("game_ended");
self endon("death");
for(;;)
{
level waittill("juggernaut_equipped",var_00);
maps\mp\_entityheadicons::setheadicon(var_00,"",(0,0,0));
self disableplayeruse(var_00);
thread doubledip(var_00);
}
}