245 lines
5.4 KiB
Plaintext
245 lines
5.4 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
|
|
/*******************************************************************
|
|
// _aamissile.gsc
|
|
//
|
|
// Holds all the aamissile specific functions
|
|
//
|
|
// Jordan Hirsh Jan. 18th 2011
|
|
********************************************************************/
|
|
|
|
|
|
init()
|
|
{
|
|
precacheItem( "aamissile_projectile_mp" );
|
|
precacheShader( "ac130_overlay_grain" );
|
|
|
|
level.AAMissileLaunchVert = 14000;
|
|
level.AAMissileLaunchHorz = 30000;
|
|
level.AAMissileLaunchTargetDist = 1500;
|
|
|
|
level.rockets = [];
|
|
level.killstreakFuncs["aamissile"] = ::tryUseAAMissile;
|
|
|
|
}
|
|
|
|
|
|
tryUseAAMissile( lifeId, streakName )
|
|
{
|
|
self setUsingRemote( "aamissile" );
|
|
result = self maps\mp\killstreaks\_killstreaks::initRideKillstreak();
|
|
if ( result != "success" )
|
|
{
|
|
if ( result != "disconnect" )
|
|
self clearUsingRemote();
|
|
|
|
return false;
|
|
}
|
|
|
|
level thread aa_missile_fire( lifeId, self );
|
|
|
|
return true;
|
|
}
|
|
|
|
getTargets()
|
|
{
|
|
lbTargets = [];
|
|
heliTargets = [];
|
|
|
|
if ( isDefined( level.littleBirds ) && level.littleBirds.size )
|
|
{
|
|
foreach ( lb in level.littleBirds )
|
|
{
|
|
if ( lb.team != self.team )
|
|
lbTargets[lbTargets.size] = lb;
|
|
}
|
|
}
|
|
|
|
if ( isDefined(level.helis) && level.helis.size )
|
|
{
|
|
foreach ( heli in level.helis )
|
|
{
|
|
if ( heli.team != self.team )
|
|
heliTargets[heliTargets.size] = heli;
|
|
}
|
|
}
|
|
//if( level.ac130InUse && isDefined( level.ac130.owner ) && level.ac130.owner.team != self.team )
|
|
// return level.ac130.planemodel;
|
|
if( isDefined(heliTargets) && heliTargets.size )
|
|
return heliTargets[0];
|
|
else if ( isDefined(lbTargets) && lbTargets.size )
|
|
return lbTargets[0];
|
|
}
|
|
|
|
aa_missile_fire( lifeId, player )
|
|
{
|
|
aaMissileSpawn = undefined;
|
|
|
|
upVector = (0, 0, level.AAMissileLaunchVert );
|
|
backDist = level.AAMissileLaunchHorz;
|
|
targetDist = level.AAMmissileLaunchTargetDist;
|
|
|
|
bestTarget = player getTargets();
|
|
|
|
if( !isDefined(bestTarget) )
|
|
targetPos = (0,0,0);
|
|
else
|
|
{
|
|
targetPos = bestTarget.origin;
|
|
upVector = (0,0,1) * (targetPos) + (0,0,1000);
|
|
}
|
|
|
|
forward = AnglesToForward( player.angles );
|
|
startpos = player.origin + upVector + forward * backDist * -1;
|
|
|
|
rocket = MagicBullet( "aamissile_projectile_mp", startpos, targetPos, player );
|
|
|
|
//spawn f16 model and make it do somthing cool
|
|
|
|
if ( !IsDefined( rocket ) )
|
|
{
|
|
player clearUsingRemote();
|
|
return;
|
|
}
|
|
|
|
rocket.lifeId = lifeId;
|
|
rocket.type = "remote";
|
|
MissileEyes( player, rocket );
|
|
}
|
|
|
|
MissileEyes( player, rocket )
|
|
{
|
|
player endon ( "joined_team" );
|
|
player endon ( "joined_spectators" );
|
|
|
|
rocket thread Rocket_CleanupOnDeath();
|
|
player thread Player_CleanupOnGameEnded( rocket );
|
|
player thread Player_CleanupOnTeamChange( rocket );
|
|
|
|
player VisionSetMissilecamForPlayer( "black_bw", 0 );
|
|
|
|
player endon ( "disconnect" );
|
|
|
|
if ( isDefined( rocket ) )
|
|
{
|
|
player VisionSetMissilecamForPlayer( game["thermal_vision"], 1.0 );
|
|
player thread delayedFOFOverlay();
|
|
player CameraLinkTo( rocket, "tag_origin" );
|
|
player ControlsLinkTo( rocket );
|
|
|
|
if ( getDvarInt( "camera_thirdPerson" ) )
|
|
player setThirdPersonDOF( false );
|
|
|
|
rocket waittill( "death" );
|
|
|
|
// is defined check required because remote missile doesnt handle lifetime explosion gracefully
|
|
// instantly deletes its self after an explode and death notify
|
|
if ( isDefined(rocket) )
|
|
player maps\mp\_matchdata::logKillstreakEvent( "predator_missile", rocket.origin );
|
|
|
|
player ControlsUnlink();
|
|
player freezeControlsWrapper( true );
|
|
|
|
// If a player gets the final kill with a hellfire, level.gameEnded will already be true at this point
|
|
if ( !level.gameEnded || isDefined( player.finalKill ) )
|
|
player thread staticEffect( 0.5 );
|
|
|
|
wait ( 0.5 );
|
|
|
|
player ThermalVisionFOFOverlayOff();
|
|
|
|
player CameraUnlink();
|
|
|
|
if ( getDvarInt( "camera_thirdPerson" ) )
|
|
player setThirdPersonDOF( true );
|
|
|
|
}
|
|
|
|
player clearUsingRemote();
|
|
}
|
|
|
|
|
|
delayedFOFOverlay()
|
|
{
|
|
self endon ( "death" );
|
|
self endon ( "disconnect" );
|
|
level endon ( "game_ended" );
|
|
|
|
wait ( 0.15 );
|
|
|
|
self ThermalVisionFOFOverlayOn();
|
|
}
|
|
|
|
staticEffect( duration )
|
|
{
|
|
self endon ( "disconnect" );
|
|
|
|
staticBG = newClientHudElem( self );
|
|
staticBG.horzAlign = "fullscreen";
|
|
staticBG.vertAlign = "fullscreen";
|
|
staticBG setShader( "white", 640, 480 );
|
|
staticBG.archive = true;
|
|
staticBG.sort = 10;
|
|
|
|
static = newClientHudElem( self );
|
|
static.horzAlign = "fullscreen";
|
|
static.vertAlign = "fullscreen";
|
|
static setShader( "ac130_overlay_grain", 640, 480 );
|
|
static.archive = true;
|
|
static.sort = 20;
|
|
|
|
wait ( duration );
|
|
|
|
static destroy();
|
|
staticBG destroy();
|
|
}
|
|
|
|
|
|
Player_CleanupOnTeamChange( rocket )
|
|
{
|
|
rocket endon ( "death" );
|
|
self endon ( "disconnect" );
|
|
|
|
self waittill_any( "joined_team" , "joined_spectators" );
|
|
|
|
if ( self.team != "spectator" )
|
|
{
|
|
self ThermalVisionFOFOverlayOff();
|
|
self ControlsUnlink();
|
|
self CameraUnlink();
|
|
|
|
if ( getDvarInt( "camera_thirdPerson" ) )
|
|
self setThirdPersonDOF( true );
|
|
}
|
|
self clearUsingRemote();
|
|
|
|
level.remoteMissileInProgress = undefined;
|
|
}
|
|
|
|
|
|
Rocket_CleanupOnDeath()
|
|
{
|
|
entityNumber = self getEntityNumber();
|
|
level.rockets[ entityNumber ] = self;
|
|
self waittill( "death" );
|
|
|
|
level.rockets[ entityNumber ] = undefined;
|
|
}
|
|
|
|
|
|
Player_CleanupOnGameEnded( rocket )
|
|
{
|
|
rocket endon ( "death" );
|
|
self endon ( "death" );
|
|
|
|
level waittill ( "game_ended" );
|
|
|
|
self ThermalVisionFOFOverlayOff();
|
|
self ControlsUnlink();
|
|
self CameraUnlink();
|
|
|
|
if ( getDvarInt( "camera_thirdPerson" ) )
|
|
self setThirdPersonDOF( true );
|
|
}
|