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