iw6-scripts/maps/mp/_empgrenade.gsc
2024-02-13 13:20:49 +01:00

135 lines
3.0 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
thread monitorempgrenade();
}
}
monitorempgrenade()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
self.empendtime = 0;
for (;;)
{
self waittill( "emp_damage", var_0, var_1 );
if ( !isalive( self ) || isdefined( self.usingremote ) || maps\mp\_utility::_hasperk( "specialty_empimmune" ) || !isdefined( var_0 ) )
continue;
var_2 = 1;
var_3 = 0;
if ( level.teambased && var_0 != self && isdefined( var_0.pers["team"] ) && var_0.pers["team"] == self.pers["team"] )
{
if ( level.friendlyfire == 0 )
continue;
else if ( level.friendlyfire == 1 )
{
var_3 = 0;
var_2 = 1;
}
else if ( level.friendlyfire == 2 )
{
var_2 = 0;
var_3 = 1;
}
else if ( level.friendlyfire == 3 )
{
var_3 = 1;
var_2 = 1;
}
}
else
{
var_0 notify( "emp_hit" );
if ( var_0 != self )
var_0 maps\mp\gametypes\_missions::processchallenge( "ch_onthepulse" );
}
if ( var_2 && isdefined( self ) )
thread applyemp( var_1 );
if ( var_3 )
var_0 thread applyemp( var_1 );
}
}
applyemp( var_0 )
{
self notify( "applyEmp" );
self endon( "applyEmp" );
self endon( "disconnect" );
self endon( "death" );
wait 0.05;
self.empgrenaded = 1;
self shellshock( "flashbang_mp", 1 );
self.empendtime = gettime() + var_0 * 1000;
maps\mp\killstreaks\_emp_common::applyperplayerempeffects_ondetonate();
maps\mp\killstreaks\_emp_common::applyperplayerempeffects();
thread emprumbleloop( 0.75 );
thread empgrenadedeathwaiter();
wait( var_0 );
self notify( "empGrenadeTimedOut" );
checktoturnoffemp();
}
empgrenadedeathwaiter()
{
self notify( "empGrenadeDeathWaiter" );
self endon( "empGrenadeDeathWaiter" );
self endon( "empGrenadeTimedOut" );
self waittill( "death" );
checktoturnoffemp();
}
checktoturnoffemp()
{
self.empgrenaded = 0;
if ( !maps\mp\killstreaks\_emp_common::shouldplayerbeaffectedbyemp() )
maps\mp\killstreaks\_emp_common::removeperplayerempeffects();
}
emprumbleloop( var_0 )
{
self endon( "emp_rumble_loop" );
self notify( "emp_rumble_loop" );
var_1 = gettime() + var_0 * 1000;
while ( gettime() < var_1 )
{
self playrumbleonentity( "damage_heavy" );
wait 0.05;
}
}
isempgrenaded()
{
return isdefined( self.empendtime ) && gettime() < self.empendtime;
}