Files
Recompilable-gscs-for-BO2-z…/patch_mp/maps/mp/_flashgrenades.gsc

206 lines
4.2 KiB
Plaintext

#include maps/mp/_utility;
main()
{
precacheshellshock( "flashbang" );
level.sound_flash_start = "";
level.sound_flash_loop = "";
level.sound_flash_stop = "";
}
startmonitoringflash()
{
self thread monitorflash();
}
stopmonitoringflash( disconnected )
{
self notify( "stop_monitoring_flash" );
}
flashrumbleloop( duration )
{
self endon( "stop_monitoring_flash" );
self endon( "flash_rumble_loop" );
self notify( "flash_rumble_loop" );
goaltime = getTime() + ( duration * 1000 );
while ( getTime() < goaltime )
{
self playrumbleonentity( "damage_heavy" );
wait 0,05;
}
}
monitorflash_internal( amount_distance, amount_angle, attacker, direct_on_player )
{
hurtattacker = 0;
hurtvictim = 1;
if ( amount_angle < 0,5 )
{
amount_angle = 0,5;
}
else
{
if ( amount_angle > 0,8 )
{
amount_angle = 1;
}
}
if ( isDefined( attacker ) && attacker == self )
{
amount_distance *= 0,5;
}
duration = amount_distance * amount_angle * 6;
if ( duration < 0,25 )
{
return;
}
rumbleduration = undefined;
if ( duration > 2 )
{
rumbleduration = 0,75;
}
else
{
rumbleduration = 0,25;
}
/#
assert( isDefined( self.team ) );
#/
if ( level.teambased && isDefined( attacker ) && isDefined( attacker.team ) && attacker.team == self.team && attacker != self )
{
if ( level.friendlyfire == 0 )
{
return;
}
else if ( level.friendlyfire == 1 )
{
}
else if ( level.friendlyfire == 2 )
{
duration *= 0,5;
rumbleduration *= 0,5;
hurtvictim = 0;
hurtattacker = 1;
}
else
{
if ( level.friendlyfire == 3 )
{
duration *= 0,5;
rumbleduration *= 0,5;
hurtattacker = 1;
}
}
}
if ( self hasperk( "specialty_flashprotection" ) )
{
duration *= 0,1;
rumbleduration *= 0,1;
}
if ( hurtvictim )
{
if ( self mayapplyscreeneffect() || !direct_on_player && self isremotecontrolling() )
{
if ( self != attacker )
{
attacker addweaponstat( "flash_grenade_mp", "hits", 1 );
attacker addweaponstat( "flash_grenade_mp", "used", 1 );
}
self thread applyflash( duration, rumbleduration, attacker );
}
}
if ( hurtattacker )
{
if ( attacker mayapplyscreeneffect() )
{
attacker thread applyflash( duration, rumbleduration, attacker );
}
}
}
monitorflash()
{
self endon( "disconnect" );
self.flashendtime = 0;
while ( 1 )
{
self waittill( "flashbang", amount_distance, amount_angle, attacker );
while ( !isalive( self ) )
{
continue;
}
self monitorflash_internal( amount_distance, amount_angle, attacker, 1 );
}
}
monitorrcbombflash()
{
self endon( "death" );
self.flashendtime = 0;
while ( 1 )
{
self waittill( "flashbang", amount_distance, amount_angle, attacker );
driver = self getseatoccupant( 0 );
if ( !isDefined( driver ) || !isalive( driver ) )
{
continue;
}
driver monitorflash_internal( amount_distance, amount_angle, attacker, 0 );
}
}
applyflash( duration, rumbleduration, attacker )
{
if ( !isDefined( self.flashduration ) || duration > self.flashduration )
{
self.flashduration = duration;
}
if ( !isDefined( self.flashrumbleduration ) || rumbleduration > self.flashrumbleduration )
{
self.flashrumbleduration = rumbleduration;
}
self thread playflashsound( duration );
wait 0,05;
if ( isDefined( self.flashduration ) )
{
self shellshock( "flashbang", self.flashduration, 0 );
self.flashendtime = getTime() + ( self.flashduration * 1000 );
self.lastflashedby = attacker;
}
if ( isDefined( self.flashrumbleduration ) )
{
self thread flashrumbleloop( self.flashrumbleduration );
}
self.flashduration = undefined;
self.flashrumbleduration = undefined;
}
playflashsound( duration )
{
self endon( "death" );
self endon( "disconnect" );
flashsound = spawn( "script_origin", ( 0, 0, 1 ) );
flashsound.origin = self.origin;
flashsound linkto( self );
flashsound thread deleteentonownerdeath( self );
flashsound playsound( level.sound_flash_start );
flashsound playloopsound( level.sound_flash_loop );
if ( duration > 0,5 )
{
wait ( duration - 0,5 );
}
flashsound playsound( level.sound_flash_start );
flashsound stoploopsound( 0,5 );
wait 0,5;
flashsound notify( "delete" );
flashsound delete();
}
deleteentonownerdeath( owner )
{
self endon( "delete" );
owner waittill( "death" );
self delete();
}