132 lines
3.5 KiB
Plaintext
132 lines
3.5 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
|
|
// 2013-03-12 wsh
|
|
// shared utility for grenade-style designators
|
|
// init in your own ks script
|
|
// callbackFunc( killstreakName, designatorGrenadeEnt );
|
|
// We assume designator weapon can only be used once
|
|
designator_Start( killstreakName, designatorName, onTargetAcquiredCallback )
|
|
{
|
|
AssertEx( IsDefined( onTargetAcquiredCallback ), "designator onTargetAcquiredCallback must be specified for " + designatorName );
|
|
|
|
self endon ( "death" );
|
|
self.marker = undefined;
|
|
|
|
if ( self GetCurrentWeapon() == designatorName )
|
|
{
|
|
self thread designator_DisableUsabilityDuringGrenadePullback( designatorName );
|
|
self thread designator_WaitForGrenadeFire( killstreakName, designatorName, onTargetAcquiredCallback );
|
|
|
|
self designator_WaitForWeaponChange( designatorName );
|
|
|
|
return ( !(self GetAmmoCount( designatorName ) && self HasWeapon( designatorName ) ) );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
designator_DisableUsabilityDuringGrenadePullback( designatorName ) // self == player
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
|
|
usedWeaponName = "";
|
|
while ( usedWeaponName != designatorName )
|
|
{
|
|
self waittill( "grenade_pullback", usedWeaponName );
|
|
}
|
|
|
|
self _disableUsability();
|
|
self designator_EnableUsabilityWhenDesignatorFinishes();
|
|
}
|
|
|
|
designator_EnableUsabilityWhenDesignatorFinishes() // self == player
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
// self notify( "beginMarkerTracking" );
|
|
// self endon( "beginMarkerTracking" );
|
|
|
|
self waittill_any( "grenade_fire", "weapon_change" );
|
|
self _enableUsability();
|
|
}
|
|
|
|
designator_WaitForGrenadeFire( killstreakName, designatorName, callbackFunc ) // self == player
|
|
{
|
|
self endon( "designator_finished" );
|
|
|
|
self endon( "spawned_player" );
|
|
self endon( "disconnect" );
|
|
|
|
designatorGrenade = undefined;
|
|
usedWeaponName = "";
|
|
while ( usedWeaponName != designatorName )
|
|
{
|
|
self waittill( "grenade_fire", designatorGrenade, usedWeaponName );
|
|
}
|
|
|
|
if ( IsAlive( self ) )
|
|
{
|
|
designatorGrenade.owner = self;
|
|
designatorGrenade.weaponName = designatorName;
|
|
|
|
self.marker = designatorGrenade;
|
|
|
|
// maybe this should be in the callback?
|
|
// marker PlaySoundToPlayer( "", self );
|
|
|
|
self thread designator_OnTargetAcquired( killstreakName, designatorGrenade, callbackFunc );
|
|
}
|
|
else
|
|
{
|
|
designatorGrenade Delete();
|
|
}
|
|
|
|
self notify( "designator_finished" );
|
|
}
|
|
|
|
designator_WaitForWeaponChange( designatorName ) // self == player
|
|
{
|
|
self endon( "spawned_player" );
|
|
self endon( "disconnect" );
|
|
|
|
currentWeapon = self getCurrentWeapon();
|
|
while ( currentWeapon == designatorName )
|
|
{
|
|
self waittill( "weapon_change", currentWeapon );
|
|
}
|
|
|
|
// this could have ended because we switched weapons normally
|
|
// or because we used the killstreak
|
|
if ( self GetAmmoCount( designatorName ) == 0 )
|
|
{
|
|
self designator_RemoveDesignatorAndRestorePreviousWeapon( designatorName );
|
|
}
|
|
|
|
self notify( "designator_finished" );
|
|
}
|
|
|
|
designator_RemoveDesignatorAndRestorePreviousWeapon( designatorName )
|
|
{
|
|
if ( self HasWeapon( designatorName ) )
|
|
{
|
|
self TakeWeapon( designatorName );
|
|
// self SwitchToWeapon( self getLastWeapon() );
|
|
}
|
|
}
|
|
|
|
designator_OnTargetAcquired( killstreakName, designatorGrenade, onTargetAcquiredCallback ) // self == player
|
|
{
|
|
designatorGrenade waittill( "missile_stuck", stuckTo );
|
|
|
|
if ( IsDefined( designatorGrenade.owner ) )
|
|
{
|
|
self thread [[ onTargetAcquiredCallback ]]( killstreakName, designatorGrenade );
|
|
}
|
|
|
|
if ( IsDefined( designatorGrenade ) )
|
|
{
|
|
designatorGrenade Delete();
|
|
}
|
|
} |