init
This commit is contained in:
132
maps/mp/killstreaks/_designator_grenade.gsc
Normal file
132
maps/mp/killstreaks/_designator_grenade.gsc
Normal file
@ -0,0 +1,132 @@
|
||||
#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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user