2024-12-11 11:28:08 +01:00

328 lines
7.5 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
/*******************************************************************
// _aastrike.gsc
//
// Holds all the aastrike specific functions
//
// Jordan Hirsh Jan. 25th 2011
********************************************************************/
init()
{
precacheItem( "aamissile_projectile_mp" );
precacheModel( "vehicle_av8b_harrier_jet_mp" );
level.teamAirDenied["axis"] = false;
level.teamAirDenied["allies"] = false;
level.rockets = [];
level.killstreakFuncs["aastrike"] = ::tryUseAAStrike;
}
tryUseAAStrike( lifeId, streakName )
{
/#
heightEnt = GetEnt( "airstrikeheight", "targetname" );
assertEx( isDefined( heightEnt ), "NO HEIGHT ENT IN LEVEL: Don't know what this means, ask Ned or Jordan" );
if ( !isDefined(heightEnt) )
return false;
#/
self maps\mp\_matchdata::logKillstreakEvent( "aastrike", self.origin );
self thread finishAAStrike( lifeId );
self thread teamPlayerCardSplash( "used_aastrike", self, self.team );
return true;
}
cycleTargets()
{
self endon("stopFindingTargets");
self endon("disconnect");
self endon ( "owner_gone" );
self endon ( "game_ended" );
for( ;; )
{
wait(.05);
self findTargets();
wait( randomIntRange(4,5) );
}
}
findTargets()
{
self endon ( "disconnect" );
self endon ( "owner_gone" );
self endon ( "game_ended" );
lbTargets = [];
heliTargets = [];
uavTargets = [];
if ( isDefined( level.littleBirds ) && level.littleBirds.size )
{
foreach ( lb in level.littleBirds )
{
if ( isDefined( lb.team ) && 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;
}
}
otherTeam = getOtherTeam( self.team );
if ( isDefined( level.activeUAVs[otherTeam] ) )
{
foreach ( uav in level.uavmodels[otherTeam] )
{
uavTargets[uavTargets.size] = uav;
}
}
targetCount = 0;
foreach( lb in lbTargets )
{
wait( 3 );
if ( targetCount % 2 )
self thread fireAtTarget( lb, self.team, true );
else
self thread fireAtTarget( lb, self.team, false );
targetCount++;
}
foreach( heli in heliTargets )
{
wait( 3 );
self thread fireAtTarget( heli, self.team, true );
}
foreach( uav in uavTargets )
{
wait( 0.5 );
self thread fireAtTarget( uav, self.team, false );
}
/*
if( level.ac130InUse && isDefined( level.ac130.owner ) && level.ac130.owner.team != self.team )
{
ac130Target = level.ac130.planemodel;
wait( 6 );
self thread fireAtTarget( ac130Target, self.team, true );
}
*/
}
earlyAbortWatcher()
{
self endon( "stopFindingTargets" );
team = self.team;
if ( bot_is_fireteam_mode() )
{
self waittill( "killstreak_disowned" );
}
else
{
self waittill_either( "killstreak_disowned", "game_ended" );
}
self notify( "owner_gone" );
level.teamAirDenied[getOtherTeam(team)] = false;
level.airDeniedPlayer = undefined;
}
finishAAStrike( lifeId )
{
self endon ( "disconnect" );
self endon ( "owner_gone" );
self endon ( "game_ended" );
//message air up there
level.teamAirDenied[getOtherTeam(self.team)] = true;
level.airDeniedPlayer = self;
self thread earlyAbortWatcher();
//splash incoming in 10
//wait ( 1 );
//splash incoming in 9
//wait(3)
//splash incoming in 6
//wait(4)
//splash incoming in 2
//wait( 1 )
//splash incoming in 1
self thread cycleTargets();
for( i = 0; i < 4; i++ )
{
wait ( 6 );
if ( i == 1 || i == 3 )
self thread doFlyBy( true );
else
self thread doFlyBy( false );
}
wait(3);
self notify("stopFindingTargets");
level.teamAirDenied[getOtherTeam(self.team)] = false;
level.airDeniedPlayer = undefined;
}
fireAtTarget( curTarget, team, showIcon )
{
if ( !isDefined(curTarget) )
return;
upVector = (0, 0, 14000 );
miniUpVector = (0, 0, 1500);
backDist = 15000;
forwardDist = 20000;
targetPos = curTarget.origin;
upVector = (0,0,1) * (targetPos) + (0,0,1000);
curTargetYaw = curTarget.angles * (0,1,0);
forward = AnglesToForward( curTargetYaw );
startpos = curTarget.origin + miniUpVector + forward * backDist * -1;
endPos = curTarget.origin + miniUpVector + forward * forwardDist;
rocket1 = MagicBullet( "aamissile_projectile_mp", startpos + (0,0,-75), curTarget.origin, self );
rocket1 Missile_SetTargetEnt( curTarget );
rocket1 Missile_SetFlightmodeDirect();
rocket2 = MagicBullet( "aamissile_projectile_mp", startpos + (RandomInt(500), RandomInt(500), -75), curTarget.origin, self );
rocket2 Missile_SetTargetEnt( curTarget );
rocket2 Missile_SetFlightmodeDirect();
if ( showIcon )
plane = spawnplane( self, "script_model", startpos, "compass_objpoint_airstrike_friendly", "compass_objpoint_airstrike_friendly" );
else
plane = spawnplane( self, "script_model", startpos );
if ( self.team == "allies" )
plane setModel( "vehicle_av8b_harrier_jet_mp" );
else
plane setModel( "vehicle_av8b_harrier_jet_opfor_mp" );
length = distance(startPos, endPos);
plane.angles = vectorToAngles( endPos-startPos );
plane thread AASoundManager(length);
plane thread playPlaneFx();
length = distance(startPos, endPos);
plane moveTo( endPos * 2, length/2000, 0, 0 );
wait( length/3000 );
plane delete();
}
AASoundManager( length )
{
self playloopsound( "veh_aastrike_flyover_loop" );
wait( (length/2) / 2000 );
self stopLoopSound();
self playloopsound( "veh_aastrike_flyover_outgoing_loop" );
}
doFlyBy( showIcon )
{
self endon ( "disconnect" );
randSpawn = randomInt( level.spawnPoints.size - 1 );
targetPos = level.spawnPoints[randSpawn].origin * (1,1,0);
backDist = 20000;
forwardDist = 20000;
heightEnt = GetEnt( "airstrikeheight", "targetname" );
upVector = (0, 0, heightEnt.origin[2] + randomIntRange(-100, 600) );
forward = AnglesToForward( (0,randomInt(45),0) );
startpos = targetPos + upVector + forward * backDist * -1;
endPos = targetPos + upVector + forward * forwardDist;
plane2StartPos = startpos + ( randomIntRange(400,500), randomIntRange(400,500), randomIntRange(200,300) );
plane2EndPos = endPos + ( randomIntRange(400,500), randomIntRange(400,500), randomIntRange(200,300) );
if ( showIcon )
plane = spawnplane( self, "script_model", startpos, "hud_minimap_harrier_green", "hud_minimap_harrier_red" );
else
plane = spawnplane( self, "script_model", startpos );
plane2 = spawnplane( self, "script_model", plane2StartPos );
if ( self.team == "allies" )
{
plane setModel( "vehicle_av8b_harrier_jet_mp" );
plane2 setModel( "vehicle_av8b_harrier_jet_mp" );
}
else
{
plane setModel( "vehicle_av8b_harrier_jet_opfor_mp" );
plane2 setModel( "vehicle_av8b_harrier_jet_opfor_mp" );
}
plane.angles = vectorToAngles( endPos-startPos );
plane playloopsound( "veh_aastrike_flyover_loop" );
plane thread playPlaneFx();
plane2.angles = vectorToAngles( endPos-plane2StartPos );
plane2 thread playPlaneFx();
length = distance(startPos, endPos);
plane moveTo( endPos * 2, length/1800, 0, 0 );
wait( randomFloatRange( .25, .5 ) );
plane2 moveTo( plane2EndPos * 2, length/1800, 0, 0 );
wait( length/1600 );
plane delete();
plane2 delete();
}
playPlaneFx()
{
self endon ( "death" );
wait( 0.5);
playfxontag( level.fx_airstrike_afterburner, self, "tag_engine_right" );
wait( 0.5);
playfxontag( level.fx_airstrike_afterburner, self, "tag_engine_left" );
wait( 0.5);
playfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
wait( 0.5);
playfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
}