IL-GSC/BO2/PC/MP/maps/mp/_empgrenade.gsc
2023-10-28 00:17:17 -04:00

198 lines
3.8 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_empgrenade.gsc
* Game: Call of Duty: Black Ops 2
* Platform: PC
* Function Count: 10
* Decompile Time: 1 ms
* Timestamp: 10/28/2023 12:10:55 AM
*******************************************************************/
#include common_scripts/utility;
#include maps/mp/_utility;
#include maps/mp/killstreaks/_emp;
//Function Number: 1
init()
{
precacheshellshock("flashbang");
thread onplayerconnect();
}
//Function Number: 2
onplayerconnect()
{
for(;;)
{
level waittill("connected",player);
player thread onplayerspawned();
}
}
//Function Number: 3
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
self thread monitorempgrenade();
}
}
//Function Number: 4
monitorempgrenade()
{
self endon("disconnect");
self endon("death");
self.empendtime = 0;
while(1)
{
self waittill("emp_grenaded",attacker);
if(!isalive(self) || self hasperk("specialty_immuneemp"))
{
continue;
}
hurtvictim = 1;
hurtattacker = 0;
/#
assert(IsDefined(self.team));
#/
if(level.teambased && IsDefined(attacker) && IsDefined(attacker.team) && attacker.team == self.team && attacker != self)
{
if(level.friendlyfire == 0)
{
continue;
}
else if(level.friendlyfire == 1)
{
hurtattacker = 0;
hurtvictim = 1;
}
else if(level.friendlyfire == 2)
{
hurtvictim = 0;
hurtattacker = 1;
}
else if(level.friendlyfire == 3)
{
hurtattacker = 1;
hurtvictim = 1;
}
}
if(hurtvictim && IsDefined(self))
{
self thread applyemp(attacker);
}
if(hurtattacker && IsDefined(attacker))
{
attacker thread applyemp(attacker);
}
}
}
//Function Number: 5
applyemp(attacker)
{
self notify("applyEmp");
self endon("applyEmp");
self endon("disconnect");
self endon("death");
wait(0.05);
if(self == attacker)
{
if(IsDefined(self.empendtime))
{
emp_time_left_ms = self.empendtime - GetTime();
if(emp_time_left_ms > 1000)
{
self.empduration = emp_time_left_ms / 1000;
}
else
{
self.empduration = 1;
}
}
else
{
self.empduration = 1;
}
}
else
{
self.empduration = 12;
}
self.empgrenaded = 1;
self shellshock("flashbang",1);
self.empendtime = GetTime() + self.empduration * 1000;
self thread emprumbleloop(0.75);
self setempjammed(1);
self thread empgrenadedeathwaiter();
wait(self.empduration);
self notify("empGrenadeTimedOut");
self checktoturnoffemp();
}
//Function Number: 6
empgrenadedeathwaiter()
{
self notify("empGrenadeDeathWaiter");
self endon("empGrenadeDeathWaiter");
self endon("empGrenadeTimedOut");
self waittill("death");
self checktoturnoffemp();
}
//Function Number: 7
checktoturnoffemp()
{
self.empgrenaded = 0;
if((level.teambased && maps/mp/killstreaks/_emp::emp_isteamemped(self.team)) || !level.teambased && IsDefined(level.empplayer) && level.empplayer != self)
{
return;
}
self setempjammed(0);
}
//Function Number: 8
emprumbleloop(duration)
{
self endon("emp_rumble_loop");
self notify("emp_rumble_loop");
goaltime = GetTime() + duration * 1000;
while(GetTime() < goaltime)
{
self playrumbleonentity("damage_heavy");
wait(0.05);
}
}
//Function Number: 9
watchempexplosion(owner,weaponname)
{
owner endon("disconnect");
owner endon("team_changed");
self endon("shutdown_empgrenade");
self thread watchempgrenadeshutdown();
owner addweaponstat(weaponname,"used",1);
self waittill("explode",origin,surface);
ents = getdamageableentarray(origin,512);
foreach(ent in ents)
{
ent dodamage(1,origin,owner,owner,"none","MOD_GRENADE_SPLASH",0,weaponname);
}
}
//Function Number: 10
watchempgrenadeshutdown()
{
self endon("explode");
self waittill("death");
wait(0.05);
self notify("shutdown_empgrenade");
}