mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-22 17:15:48 +00:00
312 lines
7.2 KiB
Plaintext
312 lines
7.2 KiB
Plaintext
#include common_scripts\utility;
|
|
|
|
//dierction of atbr missile, just off perefectly straight up.
|
|
ATBR_MISSILE_DIRECTION = ( 1.0, 1.0, 20.0 );
|
|
|
|
ATBR_HUD_TIMER_POS_X = 0.0;
|
|
ATBR_HUD_TIMER_POS_Y = -85.0;
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_init()
|
|
{
|
|
// TagZP<NOTE> Moved atbr weapons into a new array as defined in the comment below
|
|
// I did this because now mp and sp do not share the same weapon defs.
|
|
//level._atbr_weapons["base"];
|
|
//level._atbr_weapons["detonate"];
|
|
//level._atbr_weapons["missile"];
|
|
//level._atbr_weapons["bullet"];
|
|
|
|
foreach( weapon in level._atbr_weapons )
|
|
{
|
|
PreCacheItem( weapon );
|
|
}
|
|
|
|
// Misc.
|
|
VisionSetMissilecam( "missilecam" );
|
|
PreCacheShader( "remotemissile_infantry_target" );
|
|
PreCacheShader( "hud_fofbox_self_sp" );
|
|
}
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_give()
|
|
{
|
|
|
|
self giveWeapon( level._atbr_weapons["base"] );
|
|
if( isSP( ))
|
|
{
|
|
self givemaxammo( level._atbr_weapons["base"] );
|
|
}
|
|
else
|
|
{
|
|
//mp kill streak only supports one atbr missile
|
|
self givestartammo( level._atbr_weapons["base"] );
|
|
}
|
|
|
|
if( !isDefined( self.atbr_planted ))
|
|
{
|
|
self.atbr_planted = false;
|
|
}
|
|
|
|
self SetActionSlot( 4, "weapon", level._atbr_weapons["base"] );
|
|
self.atbr_planted = false;
|
|
|
|
// Watch the ATBR for this player.
|
|
self thread atbr_common_watch_base();
|
|
}
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_watch_base()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for( ;; )
|
|
{
|
|
self waittill( "grenade_fire", atbr_base, weapname );
|
|
if ( weapname == level._atbr_weapons["base"] || weapname == "claymore_mp" )
|
|
{
|
|
self.atbr_planted = true;
|
|
atbr_base.owner = self;
|
|
self.attached = false;
|
|
atbr_base thread atbr_common_watch_detonation( self );
|
|
|
|
self giveWeapon( level._atbr_weapons["detonate"] );
|
|
self givemaxammo( level._atbr_weapons["detonate"] );
|
|
|
|
self switchtoweapon( level._atbr_weapons["detonate"] );
|
|
|
|
if( !isSP( ))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_watch_detonation( player )
|
|
{
|
|
self endon( "death" );
|
|
|
|
for( ;; )
|
|
{
|
|
player waittill( "detonate", weapname );
|
|
if ( weapname == level._atbr_weapons["detonate"] )
|
|
{
|
|
player.atbr_planted = false;
|
|
|
|
atbr_takeoff_direction = ATBR_MISSILE_DIRECTION;
|
|
missile = MagicBullet( level._atbr_weapons["missile"], self.origin, self.origin + atbr_takeoff_direction, player );
|
|
|
|
missile.angles = (-90, self.angles[1], 0);
|
|
self hide();
|
|
|
|
atbr_common_attach_to_bullet( player, missile );
|
|
|
|
if( isSP( ))
|
|
{
|
|
player switchtoweapon( level._atbr_weapons["base"] );
|
|
}
|
|
|
|
player TakeWeapon( level._atbr_weapons["detonate"] );
|
|
|
|
// tagTMR<NOTE> Notifying complete switches weapons back to primary, causing incorrect
|
|
// killstreak and stat tallies as the player gets kills while following the missle
|
|
player notify( "atbr_complete" );
|
|
|
|
self delete();
|
|
}
|
|
wait( 0.1 );
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_attach_to_bullet( player, missile )
|
|
{
|
|
wait( 0.25 );
|
|
if( isdefined( missile ))
|
|
{
|
|
// Do not attach the player to multiple rockets.
|
|
if( player.attached == false )
|
|
{
|
|
|
|
if( isDefined( level._atbr_ammo_count ))
|
|
{
|
|
player._atbr_ammo_count = level._atbr_ammo_count;
|
|
}
|
|
|
|
if( isAlive( player ))
|
|
{
|
|
player.attached = true;
|
|
player link_camera_and_controls( missile );
|
|
player atbr_common_follow_missile( missile );
|
|
missile waittill( "death" );
|
|
player unlink_camera_and_controls();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_follow_missile( missile )
|
|
{
|
|
self endon( "death" );
|
|
missile endon( "death" );
|
|
|
|
// Link player.
|
|
self thread atbr_common_fire_shots( missile );
|
|
}
|
|
|
|
link_camera_and_controls( missile )
|
|
{
|
|
self CameraLinkTo( missile, "tag_origin", 1);
|
|
self ControlsLinkTo( missile );
|
|
|
|
// Targets.
|
|
if( isdefined( level._atbr_callback_set_targets ))
|
|
{
|
|
self [[ level._atbr_callback_set_targets ]]( missile );
|
|
}
|
|
|
|
//if ammo count is defined create a hud elem for it.
|
|
if( isDefined( self._atbr_ammo_count ))
|
|
{
|
|
self createHudATBRAmmoCounter( self._atbr_ammo_count );
|
|
}
|
|
}
|
|
|
|
unlink_camera_and_controls( )
|
|
{
|
|
self CameraUnlink();
|
|
self ControlsUnLink();
|
|
|
|
// Targets.
|
|
if( isdefined( level._atbr_callback_remove_targets ))
|
|
{
|
|
self [[ level._atbr_callback_remove_targets ]]();
|
|
}
|
|
|
|
if( isDefined( self._atbr_ammo_count ))
|
|
{
|
|
self destroyHudATBRAmmoCounter();
|
|
}
|
|
}
|
|
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
atbr_common_fire_shots( missile )
|
|
{
|
|
missile endon( "death" );
|
|
self endon( "death" );
|
|
self NotifyOnPlayerCommand( "fire_shot", "+attack" );
|
|
for( ;; )
|
|
{
|
|
self waittill( "fire_shot" );
|
|
|
|
//if a ammo count is defined, update hud, and cut off when all ammo is used.
|
|
if( isDefined( self._atbr_ammo_count ))
|
|
{
|
|
if( self._atbr_ammo_count <= 0 )
|
|
{
|
|
//keep the camera attached till the missile has span its entire life
|
|
//wait( 0.05 );
|
|
//continue;
|
|
|
|
//exit missile cam back to player
|
|
wait( 0.2 );
|
|
break;
|
|
}
|
|
|
|
self._atbr_ammo_count = self._atbr_ammo_count - 1;
|
|
self updateHudATBRAmmoCounter( self._atbr_ammo_count );
|
|
}
|
|
|
|
Earthquake( 0.2, 1, missile.origin, 5000 );
|
|
start = missile.origin;
|
|
forward = AnglesToForward( missile.angles );
|
|
forward = forward * ( 1, -1, -1 );
|
|
end = start + ( forward * 2000.0 );
|
|
MagicBullet( level._atbr_weapons["bullet"], start, end, self );
|
|
wait( 0.1 );
|
|
}
|
|
}
|
|
|
|
|
|
createHudATBRAmmoCounter( count )
|
|
{
|
|
self.atbrAmmoCounter = newClientHudElem( self );
|
|
self.atbrAmmoCounter.x = ATBR_HUD_TIMER_POS_X;
|
|
self.atbrAmmoCounter.y = ATBR_HUD_TIMER_POS_Y;
|
|
self.atbrAmmoCounter.alignX = "center";
|
|
self.atbrAmmoCounter.alignY = "bottom";
|
|
self.atbrAmmoCounter.horzAlign = "center_adjustable";
|
|
self.atbrAmmoCounter.vertAlign = "bottom_adjustable";
|
|
self.atbrAmmoCounter.fontScale = 2.5;
|
|
self.atbrAmmoCounter setValue( count );
|
|
self.atbrAmmoCounter.alpha = 1.0;
|
|
}
|
|
|
|
updateHudATBRAmmoCounter( value )
|
|
{
|
|
if( isDefined( self.atbrAmmoCounter ))
|
|
{
|
|
self.atbrAmmoCounter setValue( value );
|
|
}
|
|
}
|
|
|
|
destroyHudATBRAmmoCounter()
|
|
{
|
|
if( isDefined( self.atbrAmmoCounter ))
|
|
{
|
|
self.atbrAmmoCounter Destroy();
|
|
}
|
|
}
|
|
|
|
//returns true if sWeapon is an atbr weapon
|
|
is_atbr_weapons( sWeapon )
|
|
{
|
|
if( isDefined( level._atbr_weapons ))
|
|
{
|
|
foreach( weapon in level._atbr_weapons )
|
|
{
|
|
if( weapon == sWeapon )
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|