s1-scripts-dev/raw/maps/mp/_lasersight.gsc
2025-05-21 16:23:17 +02:00

116 lines
2.9 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
lasersight_think()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
self.laser_on = undefined;
self.wasEMP = false;
while( true )
{
has_laser = false;
attachment_list = GetWeaponAttachments( self GetCurrentWeapon() );
if( isDefined( attachment_list ) )
{
foreach( attachment in attachment_list )
{
if( attachment == "lasersight" )
{
has_laser = true;
break;
}
}
}
// Handling for EMP
while( self isEMPed() && has_laser)
{
wait( 0.05);
self LaserOff();
self.wasEMP = true;
continue;
}
if ( self.wasEMP && has_laser)
{
self.wasEMP = false;
if( self maps\mp\gametypes\_class::isExoXMG( self GetCurrentWeapon() ) || self maps\mp\gametypes\_class::isSac3( self GetCurrentWeapon() ) )
self LaserOn( "mp_attachment_lasersight_short" );
else
self LaserOn( "mp_attachment_lasersight" );
}
// Adding a special case for the LSR launcher. It should have a laser on even though it doesn't have a laser attachment.
if ( IsSubStr( self GetCurrentWeapon(), "maaws" ) )
{
has_laser = true;
}
if ( has_laser && self IsThrowingGrenade() )
{
if( isDefined( self.laser_on ) && self.laser_on )
{
self LaserOff();
self.laser_on = false;
// god help us, all of this is required to get the timing correct...
// IsUsingOffhand() turns on the moment the viewmodel starts holding the grenade weapon
// IsThrowingGrenade() is here to ensure we don't get stuck if the player cancels the grenade process
while ( !self IsUsingOffhand() && self IsThrowingGrenade() )
wait( 0.05 );
// IsUsingOffhand() turns off the moment the viewmodel starts holding the primary weapon again
// IsThrowingGrenade() is here to ensure we don't get stuck if the player cancels the grenade process
while ( self IsUsingOffhand() && self IsThrowingGrenade() )
wait( 0.05 );
// IsThrowingGrenade() turns off the moment the primary weapon is usable again
while ( self IsThrowingGrenade() )
wait( 0.05 );
if( self maps\mp\gametypes\_class::isExoXMG( self GetCurrentWeapon() ) || self maps\mp\gametypes\_class::isSac3( self GetCurrentWeapon() ) )
self LaserOn( "mp_attachment_lasersight_short" );
else
self LaserOn( "mp_attachment_lasersight" );
self.laser_on = true;
}
}
if ( !has_laser )
{
if( isDefined( self.laser_on ) && self.laser_on )
{
self LaserOff();
self.laser_on = false;
}
}
else
{
if( !isDefined( self.laser_on ) || !self.laser_on )
{
if( self maps\mp\gametypes\_class::isExoXMG( self GetCurrentWeapon() ) || self maps\mp\gametypes\_class::isSac3( self GetCurrentWeapon() ) )
self LaserOn( "mp_attachment_lasersight_short" );
else
self LaserOn( "mp_attachment_lasersight" );
self.laser_on = true;
}
}
wait( 0.05 );
}
}