2024-02-13 13:20:49 +01:00

1093 lines
28 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
beginharrier( var_0, var_1, var_2 )
{
var_3 = getent( "airstrikeheight", "targetname" );
if ( isdefined( var_3 ) )
var_4 = var_3.origin[2];
else if ( isdefined( level.airstrikeheightscale ) )
var_4 = 850 * level.airstrikeheightscale;
else
var_4 = 850;
var_2 = var_2 * ( 1, 1, 0 );
var_5 = var_2 + ( 0, 0, var_4 );
var_6 = spawndefensiveharrier( var_0, self, var_1, var_5 );
var_6.pathgoal = var_5;
return var_6;
}
getcorrectheight( var_0, var_1, var_2 )
{
var_3 = 1200;
var_4 = tracegroundpoint( var_0, var_1 );
var_5 = var_4 + var_3;
if ( isdefined( level.airstrikeheightscale ) && var_5 < 850 * level.airstrikeheightscale )
var_5 = 950 * level.airstrikeheightscale;
var_5 = var_5 + randomint( var_2 );
return var_5;
}
spawndefensiveharrier( var_0, var_1, var_2, var_3 )
{
var_4 = vectortoangles( var_3 - var_2 );
var_5 = spawnhelicopter( var_1, var_2, var_4, "harrier_mp", "vehicle_av8b_harrier_jet_mp" );
if ( !isdefined( var_5 ) )
return;
var_5 addtohelilist();
var_5 thread removefromhelilistondeath();
var_5 thread handledestroydamage();
var_5.speed = 250;
var_5.accel = 175;
var_5.health = 2500;
var_5.maxhealth = var_5.health;
var_5.team = var_1.team;
var_5.owner = var_1;
var_5 setcandamage( 1 );
var_5.owner = var_1;
var_5 thread harrierdestroyed();
var_5 setmaxpitchroll( 0, 90 );
var_5 vehicle_setspeed( var_5.speed, var_5.accel );
var_5 thread playharrierfx();
var_5 setdamagestage( 3 );
var_5.missiles = 6;
var_5.pers["team"] = var_5.team;
var_5 sethoverparams( 50, 100, 50 );
var_5 setturningability( 0.05 );
var_5 setyawspeed( 45, 25, 25, 0.5 );
var_5.defendloc = var_3;
var_5.lifeid = var_0;
var_5.allowmonitoreddamage = 1;
var_5.isharrier = 1;
var_5.damagecallback = ::callback_vehicledamage;
level.harriers = common_scripts\utility::array_removeundefined( level.harriers );
level.harriers[level.harriers.size] = var_5;
level.harrier_incoming = undefined;
return var_5;
}
defendlocation( var_0 )
{
var_0 endon( "death" );
var_0 thread harriertimer();
var_0 setvehgoalpos( var_0.pathgoal, 1 );
var_0 thread closetogoalcheck( var_0.pathgoal );
var_0 waittill( "goal" );
var_0 stopharrierwingfx();
var_0 engageground();
var_0 thread monitorowner();
}
closetogoalcheck( var_0 )
{
self endon( "goal" );
self endon( "death" );
for (;;)
{
if ( distance2d( self.origin, var_0 ) < 768 )
{
self setmaxpitchroll( 45, 25 );
break;
}
wait 0.05;
}
}
engageground()
{
self notify( "engageGround" );
self endon( "engageGround" );
self endon( "death" );
thread harriergettargets();
thread randomharriermovement();
var_0 = self.defendloc;
self vehicle_setspeed( 15, 5 );
self setvehgoalpos( var_0, 1 );
self waittill( "goal" );
}
harrierleave()
{
self endon( "death" );
self setmaxpitchroll( 0, 0 );
self notify( "leaving" );
breaktarget( 1 );
self notify( "stopRand" );
for (;;)
{
self vehicle_setspeed( 35, 25 );
var_0 = self.origin + anglestoforward( ( 0, randomint( 360 ), 0 ) ) * 500;
var_0 = var_0 + ( 0, 0, 900 );
var_1 = bullettrace( self.origin, self.origin + ( 0, 0, 900 ), 0, self );
if ( var_1["surfacetype"] == "none" )
break;
wait 0.1;
}
self setvehgoalpos( var_0, 1 );
thread startharrierwingfx();
self waittill( "goal" );
self playsoundonmovingent( "harrier_fly_away" );
var_2 = getpathend();
self vehicle_setspeed( 250, 75 );
self setvehgoalpos( var_2, 1 );
self waittill( "goal" );
level.harriers[level.harriers.size - 1] = undefined;
self notify( "harrier_gone" );
thread harrierdelete();
}
harrierdelete()
{
self delete();
}
harriertimer()
{
self endon( "death" );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 90 );
harrierleave();
}
randomharriermovement()
{
self notify( "randomHarrierMovement" );
self endon( "randomHarrierMovement" );
self endon( "stopRand" );
self endon( "death" );
self endon( "acquiringTarget" );
self endon( "leaving" );
var_0 = self.defendloc;
for (;;)
{
var_1 = getnewpoint( self.origin );
self setvehgoalpos( var_1, 1 );
self waittill( "goal" );
wait( randomintrange( 1, 2 ) );
self notify( "randMove" );
}
}
getnewpoint( var_0, var_1 )
{
self endon( "stopRand" );
self endon( "death" );
self endon( "acquiringTarget" );
self endon( "leaving" );
if ( !isdefined( var_1 ) )
{
var_2 = [];
foreach ( var_4 in level.players )
{
if ( var_4 == self )
continue;
if ( !level.teambased || var_4.team != self.team )
var_2[var_2.size] = var_4.origin;
}
if ( var_2.size > 0 )
{
var_6 = averagepoint( var_2 );
var_7 = var_6[0];
var_8 = var_6[1];
}
else
{
var_9 = level.mapcenter;
var_10 = level.mapsize / 4;
var_7 = randomfloatrange( var_9[0] - var_10, var_9[0] + var_10 );
var_8 = randomfloatrange( var_9[1] - var_10, var_9[1] + var_10 );
}
var_11 = getcorrectheight( var_7, var_8, 20 );
}
else if ( common_scripts\utility::cointoss() )
{
var_12 = self.origin - self.besttarget.origin;
var_7 = var_12[0];
var_8 = var_12[1] * -1;
var_11 = getcorrectheight( var_7, var_8, 20 );
var_13 = ( var_8, var_7, var_11 );
if ( distance2d( self.origin, var_13 ) > 1200 )
{
var_8 = var_8 * 0.5;
var_7 = var_7 * 0.5;
var_13 = ( var_8, var_7, var_11 );
}
}
else
{
if ( distance2d( self.origin, self.besttarget.origin ) < 200 )
return;
var_14 = self.angles[1];
var_15 = ( 0, var_14, 0 );
var_16 = self.origin + anglestoforward( var_15 ) * randomintrange( 200, 400 );
var_11 = getcorrectheight( var_16[0], var_16[1], 20 );
var_7 = var_16[0];
var_8 = var_16[1];
}
for (;;)
{
var_17 = tracenewpoint( var_7, var_8, var_11 );
if ( var_17 != 0 )
return var_17;
var_7 = randomfloatrange( var_0[0] - 1200, var_0[0] + 1200 );
var_8 = randomfloatrange( var_0[1] - 1200, var_0[1] + 1200 );
var_11 = getcorrectheight( var_7, var_8, 20 );
}
}
tracenewpoint( var_0, var_1, var_2 )
{
self endon( "stopRand" );
self endon( "death" );
self endon( "acquiringTarget" );
self endon( "leaving" );
self endon( "randMove" );
for ( var_3 = 1; var_3 <= 10; var_3++ )
{
switch ( var_3 )
{
case 1:
var_4 = bullettrace( self.origin, ( var_0, var_1, var_2 ), 0, self );
break;
case 2:
var_4 = bullettrace( self gettagorigin( "tag_left_wingtip" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 3:
var_4 = bullettrace( self gettagorigin( "tag_right_wingtip" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 4:
var_4 = bullettrace( self gettagorigin( "tag_engine_left2" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 5:
var_4 = bullettrace( self gettagorigin( "tag_engine_right2" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 6:
var_4 = bullettrace( self gettagorigin( "tag_right_alamo_missile" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 7:
var_4 = bullettrace( self gettagorigin( "tag_left_alamo_missile" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 8:
var_4 = bullettrace( self gettagorigin( "tag_right_archer_missile" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 9:
var_4 = bullettrace( self gettagorigin( "tag_left_archer_missile" ), ( var_0, var_1, var_2 ), 0, self );
break;
case 10:
var_4 = bullettrace( self gettagorigin( "tag_light_tail" ), ( var_0, var_1, var_2 ), 0, self );
break;
default:
var_4 = bullettrace( self.origin, ( var_0, var_1, var_2 ), 0, self );
}
if ( var_4["surfacetype"] != "none" )
return 0;
wait 0.05;
}
var_5 = ( var_0, var_1, var_2 );
return var_5;
}
tracegroundpoint( var_0, var_1 )
{
self endon( "death" );
self endon( "acquiringTarget" );
self endon( "leaving" );
var_2 = -9999999;
var_3 = 9999999;
var_4 = -9999999;
var_5 = self.origin[2];
var_6 = undefined;
var_7 = undefined;
for ( var_8 = 1; var_8 <= 5; var_8++ )
{
switch ( var_8 )
{
case 1:
var_9 = bullettrace( ( var_0, var_1, var_5 ), ( var_0, var_1, var_4 ), 0, self );
break;
case 2:
var_9 = bullettrace( ( var_0 + 20, var_1 + 20, var_5 ), ( var_0 + 20, var_1 + 20, var_4 ), 0, self );
break;
case 3:
var_9 = bullettrace( ( var_0 - 20, var_1 - 20, var_5 ), ( var_0 - 20, var_1 - 20, var_4 ), 0, self );
break;
case 4:
var_9 = bullettrace( ( var_0 + 20, var_1 - 20, var_5 ), ( var_0 + 20, var_1 - 20, var_4 ), 0, self );
break;
case 5:
var_9 = bullettrace( ( var_0 - 20, var_1 + 20, var_5 ), ( var_0 - 20, var_1 + 20, var_4 ), 0, self );
break;
default:
var_9 = bullettrace( self.origin, ( var_0, var_1, var_4 ), 0, self );
}
if ( var_9["position"][2] > var_2 )
{
var_2 = var_9["position"][2];
var_6 = var_9;
}
else if ( var_9["position"][2] < var_3 )
{
var_3 = var_9["position"][2];
var_7 = var_9;
}
wait 0.05;
}
return var_2;
}
playharrierfx()
{
self endon( "death" );
wait 0.2;
playfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
playfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
wait 0.2;
playfxontag( level.harrier_afterburnerfx, self, "tag_engine_right" );
playfxontag( level.harrier_afterburnerfx, self, "tag_engine_left" );
wait 0.2;
playfxontag( level.harrier_afterburnerfx, self, "tag_engine_right2" );
playfxontag( level.harrier_afterburnerfx, self, "tag_engine_left2" );
wait 0.2;
playfxontag( level.chopper_fx["light"]["left"], self, "tag_light_L_wing" );
wait 0.2;
playfxontag( level.chopper_fx["light"]["right"], self, "tag_light_R_wing" );
wait 0.2;
playfxontag( level.chopper_fx["light"]["belly"], self, "tag_light_belly" );
wait 0.2;
playfxontag( level.chopper_fx["light"]["tail"], self, "tag_light_tail" );
}
stopharrierwingfx()
{
stopfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
stopfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
}
startharrierwingfx()
{
wait 3.0;
if ( !isdefined( self ) )
return;
playfxontag( level.fx_airstrike_contrail, self, "tag_right_wingtip" );
playfxontag( level.fx_airstrike_contrail, self, "tag_left_wingtip" );
}
getpathstart( var_0 )
{
var_1 = 100;
var_2 = 15000;
var_3 = 850;
var_4 = randomfloat( 360 );
var_5 = ( 0, var_4, 0 );
var_6 = var_0 + anglestoforward( var_5 ) * ( -1 * var_2 );
var_6 = var_6 + ( ( randomfloat( 2 ) - 1 ) * var_1, ( randomfloat( 2 ) - 1 ) * var_1, 0 );
return var_6;
}
getpathend()
{
var_0 = 150;
var_1 = 15000;
var_2 = 850;
var_3 = self.angles[1];
var_4 = ( 0, var_3, 0 );
var_5 = self.origin + anglestoforward( var_4 ) * var_1;
return var_5;
}
fireontarget( var_0, var_1 )
{
self endon( "leaving" );
self endon( "stopfiring" );
self endon( "explode" );
self endon( "death" );
self.besttarget endon( "death" );
self.besttarget endon( "disconnect" );
var_2 = gettime();
var_3 = gettime();
var_4 = 0;
self setvehweapon( "harrier_20mm_mp" );
if ( !isdefined( var_1 ) )
var_1 = 50;
for (;;)
{
if ( isreadytofire( var_0 ) )
break;
else
wait 0.25;
}
self setturrettargetent( self.besttarget, ( 0, 0, 50 ) );
var_5 = 25;
for (;;)
{
if ( var_5 == 25 )
self playloopsound( "weap_hind_20mm_fire_npc" );
var_5--;
self fireweapon( "tag_flash", self.besttarget, ( 0, 0, 0 ), 0.05 );
wait 0.1;
if ( var_5 <= 0 )
{
self stoploopsound();
wait 1;
var_5 = 25;
}
}
}
isreadytofire( var_0 )
{
self endon( "death" );
self endon( "leaving" );
if ( !isdefined( var_0 ) )
var_0 = 10;
var_1 = anglestoforward( self.angles );
var_2 = self.besttarget.origin - self.origin;
var_1 = var_1 * ( 1, 1, 0 );
var_2 = var_2 * ( 1, 1, 0 );
var_2 = vectornormalize( var_2 );
var_1 = vectornormalize( var_1 );
var_3 = vectordot( var_2, var_1 );
var_4 = cos( var_0 );
if ( var_3 >= var_4 )
return 1;
else
return 0;
}
acquiregroundtarget( var_0 )
{
self endon( "death" );
self endon( "leaving" );
if ( var_0.size == 1 )
self.besttarget = var_0[0];
else
self.besttarget = getbesttarget( var_0 );
backtodefendlocation( 0 );
self notify( "acquiringTarget" );
self setturrettargetent( self.besttarget );
self setlookatent( self.besttarget );
var_1 = getnewpoint( self.origin, 1 );
if ( !isdefined( var_1 ) )
var_1 = self.origin;
self setvehgoalpos( var_1, 1 );
thread watchtargetdeath();
thread watchtargetlos();
self setvehweapon( "harrier_20mm_mp" );
thread fireontarget();
}
backtodefendlocation( var_0 )
{
self setvehgoalpos( self.defendloc, 1 );
if ( isdefined( var_0 ) && var_0 )
self waittill( "goal" );
}
wouldcollide( var_0 )
{
var_1 = bullettrace( self.origin, var_0, 1, self );
if ( var_1["position"] == var_0 )
return 0;
else
return 1;
}
watchtargetdeath()
{
self notify( "watchTargetDeath" );
self endon( "watchTargetDeath" );
self endon( "newTarget" );
self endon( "death" );
self endon( "leaving" );
self.besttarget waittill( "death" );
thread breaktarget();
}
watchtargetlos( var_0 )
{
self endon( "death" );
self.besttarget endon( "death" );
self.besttarget endon( "disconnect" );
self endon( "leaving" );
self endon( "newTarget" );
var_1 = undefined;
if ( !isdefined( var_0 ) )
var_0 = 1000;
for (;;)
{
if ( !istarget( self.besttarget ) )
{
thread breaktarget();
return;
}
if ( !isdefined( self.besttarget ) )
{
thread breaktarget();
return;
}
if ( self.besttarget sightconetrace( self.origin, self ) < 1 )
{
if ( !isdefined( var_1 ) )
var_1 = gettime();
if ( gettime() - var_1 > var_0 )
{
thread breaktarget();
return;
}
}
else
var_1 = undefined;
wait 0.25;
}
}
breaktarget( var_0 )
{
self endon( "death" );
self clearlookatent();
self stoploopsound();
self notify( "stopfiring" );
if ( isdefined( var_0 ) && var_0 )
return;
thread randomharriermovement();
self notify( "newTarget" );
thread harriergettargets();
}
harriergettargets()
{
self notify( "harrierGetTargets" );
self endon( "harrierGetTargets" );
self endon( "death" );
self endon( "leaving" );
var_0 = [];
for (;;)
{
var_0 = [];
var_1 = level.players;
if ( isdefined( level.chopper ) && level.chopper.team != self.team && isalive( level.chopper ) )
{
if ( !isdefined( level.chopper.nontarget ) || isdefined( level.chopper.nontarget ) && !level.chopper.nontarget )
{
thread engagevehicle( level.chopper );
return;
}
else
backtodefendlocation( 1 );
}
if ( isdefined( level.littlebirds ) )
{
foreach ( var_3 in level.littlebirds )
{
if ( isdefined( var_3 ) && var_3.team != self.team && ( isdefined( var_3.helipilottype ) && var_3.helipilottype == "heli_pilot" ) )
{
thread engagevehicle( var_3 );
return;
}
}
}
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
{
var_6 = var_1[var_5];
if ( istarget( var_6 ) )
{
if ( isdefined( var_1[var_5] ) )
var_0[var_0.size] = var_1[var_5];
}
else
continue;
wait 0.05;
}
if ( var_0.size > 0 )
{
acquiregroundtarget( var_0 );
return;
}
wait 1;
}
}
istarget( var_0 )
{
self endon( "death" );
if ( !isalive( var_0 ) || var_0.sessionstate != "playing" )
return 0;
if ( isdefined( self.owner ) && var_0 == self.owner )
return 0;
if ( distance( var_0.origin, self.origin ) > 8192 )
return 0;
if ( distance2d( var_0.origin, self.origin ) < 150 )
return 0;
if ( !isdefined( var_0.pers["team"] ) )
return 0;
if ( level.teambased && var_0.pers["team"] == self.team )
return 0;
if ( var_0.pers["team"] == "spectator" )
return 0;
if ( isdefined( var_0.spawntime ) && ( gettime() - var_0.spawntime ) / 1000 <= 5 )
return 0;
if ( var_0 maps\mp\_utility::_hasperk( "specialty_blindeye" ) )
return 0;
var_1 = self.origin + ( 0, 0, -160 );
var_2 = anglestoforward( self.angles );
var_3 = var_1 + 144 * var_2;
var_4 = var_0 sightconetrace( self.origin, self );
if ( var_4 < 1 )
return 0;
return 1;
}
getbesttarget( var_0 )
{
self endon( "death" );
var_1 = self gettagorigin( "tag_flash" );
var_2 = self.origin;
var_3 = anglestoforward( self.angles );
var_4 = undefined;
var_5 = undefined;
var_6 = 0;
foreach ( var_8 in var_0 )
{
var_9 = abs( vectortoangles( var_8.origin - self.origin )[1] );
var_10 = abs( self gettagangles( "tag_flash" )[1] );
var_9 = abs( var_9 - var_10 );
var_11 = var_8 getweaponslistitems();
foreach ( var_13 in var_11 )
{
if ( issubstr( var_13, "at4" ) || issubstr( var_13, "stinger" ) || issubstr( var_13, "jav" ) )
var_9 = var_9 - 40;
}
if ( distance( self.origin, var_8.origin ) > 2000 )
var_9 = var_9 + 40;
if ( !isdefined( var_4 ) )
{
var_4 = var_9;
var_5 = var_8;
continue;
}
if ( var_4 > var_9 )
{
var_4 = var_9;
var_5 = var_8;
}
}
return var_5;
}
firemissile( var_0 )
{
self endon( "death" );
self endon( "leaving" );
if ( self.missiles <= 0 )
return;
var_1 = checkforfriendlies( var_0, 256 );
if ( !isdefined( var_0 ) )
return;
if ( distance2d( self.origin, var_0.origin ) < 512 )
return;
if ( isdefined( var_1 ) && var_1 )
return;
self.missiles--;
self setvehweapon( "aamissile_projectile_mp" );
if ( isdefined( var_0.targetent ) )
var_2 = self fireweapon( "tag_flash", var_0.targetent, ( 0, 0, -250 ) );
else
var_2 = self fireweapon( "tag_flash", var_0, ( 0, 0, -250 ) );
var_2 missile_setflightmodedirect();
var_2 missile_settargetent( var_0 );
}
checkforfriendlies( var_0, var_1 )
{
self endon( "death" );
self endon( "leaving" );
var_2 = [];
var_3 = level.players;
var_4 = var_0.origin;
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
{
var_6 = var_3[var_5];
if ( var_6.team != self.team )
continue;
var_7 = var_6.origin;
if ( distance2d( var_7, var_4 ) < 512 )
return 1;
}
return 0;
}
handledestroydamage()
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( var_9 == "aamissile_projectile_mp" && var_4 == "MOD_EXPLOSIVE" && var_0 >= self.health )
callback_vehicledamage( var_1, var_1, 9001, 0, var_4, var_9, var_3, var_2, var_3, 0, 0, var_7 );
}
callback_vehicledamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 )
{
if ( ( var_1 == self || isdefined( var_1.pers ) && var_1.pers["team"] == self.team && !level.friendlyfire && level.teambased ) && var_1 != self.owner )
return;
if ( self.health <= 0 )
return;
var_2 = maps\mp\gametypes\_damage::handleapdamage( var_5, var_4, var_2, var_1 );
switch ( var_5 )
{
case "remotemissile_projectile_mp":
case "ac130_40mm_mp":
case "ac130_105mm_mp":
case "javelin_mp":
case "stinger_mp":
case "odin_projectile_large_rod_mp":
self.largeprojectiledamage = 1;
var_2 = self.maxhealth + 1;
break;
case "rpg_mp":
case "at4_mp":
self.largeprojectiledamage = 1;
var_2 = self.maxhealth - 900;
break;
case "odin_projectile_small_rod_mp":
case "remote_tank_projectile_mp":
var_2 = int( self.maxhealth * 0.34 );
self.largeprojectiledamage = 1;
break;
case "switch_blade_child_mp":
case "drone_hive_projectile_mp":
case "iw6_panzerfaust3_mp":
var_2 = int( self.maxhealth * 0.25 );
self.largeprojectiledamage = 1;
break;
case "iw6_maaws_mp":
var_2 = int( self.maxhealth * 0.24 );
self.largeprojectiledamage = 1;
break;
default:
if ( var_5 != "none" )
var_2 = int( var_2 / 2 );
self.largeprojectiledamage = 0;
break;
}
maps\mp\killstreaks\_killstreaks::killstreakhit( var_1, var_5, self );
var_1 maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "" );
if ( isplayer( var_1 ) && var_1 maps\mp\_utility::_hasperk( "specialty_armorpiercing" ) )
{
var_12 = int( var_2 * level.armorpiercingmod );
var_2 = var_2 + var_12;
}
if ( self.health <= var_2 )
{
if ( isplayer( var_1 ) && ( !isdefined( self.owner ) || var_1 != self.owner ) )
{
thread maps\mp\_utility::teamplayercardsplash( "callout_destroyed_harrier", var_1 );
var_13 = maps\mp\gametypes\_rank::getscoreinfovalue( "destroyed_harrier" );
var_1 thread maps\mp\gametypes\_rank::xpeventpopup( "destroyed_harrier" );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "kill", var_13, var_5, var_4 );
thread maps\mp\gametypes\_missions::vehiclekilled( self.owner, self, undefined, var_1, var_2, var_4, var_5 );
var_1 notify( "destroyed_killstreak" );
}
if ( var_5 == "heli_pilot_turret_mp" )
var_1 maps\mp\gametypes\_missions::processchallenge( "ch_enemy_down" );
maps\mp\gametypes\_missions::checkaachallenges( var_1, self, var_5 );
self notify( "death" );
}
if ( self.health - var_2 <= 900 && ( !isdefined( self.smoking ) || !self.smoking ) )
{
thread playdamageefx();
self.smoking = 1;
}
self vehicle_finishdamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 );
}
playdamageefx()
{
self endon( "death" );
stopfxontag( level.harrier_afterburnerfx, self, "tag_engine_left" );
playfxontag( level.harrier_smoke, self, "tag_engine_left" );
stopfxontag( level.harrier_afterburnerfx, self, "tag_engine_right" );
playfxontag( level.harrier_smoke, self, "tag_engine_right" );
wait 0.15;
stopfxontag( level.harrier_afterburnerfx, self, "tag_engine_left2" );
playfxontag( level.harrier_smoke, self, "tag_engine_left2" );
stopfxontag( level.harrier_afterburnerfx, self, "tag_engine_right2" );
playfxontag( level.harrier_smoke, self, "tag_engine_right2" );
playfxontag( level.chopper_fx["damage"]["heavy_smoke"], self, "tag_engine_left" );
}
harrierdestroyed()
{
self endon( "harrier_gone" );
self waittill( "death" );
if ( !isdefined( self ) )
return;
if ( !isdefined( self.largeprojectiledamage ) )
{
self vehicle_setspeed( 25, 5 );
thread harrierspin( randomintrange( 180, 220 ) );
wait( randomfloatrange( 0.5, 1.5 ) );
}
harrierexplode();
}
harrierexplode()
{
self playsound( "harrier_jet_crash" );
level.harriers[level.harriers.size - 1] = undefined;
var_0 = self gettagangles( "tag_deathfx" );
playfx( level.harrier_deathfx, self gettagorigin( "tag_deathfx" ), anglestoforward( var_0 ), anglestoup( var_0 ) );
self notify( "explode" );
wait 0.05;
thread harrierdelete();
}
harrierspin( var_0 )
{
self endon( "explode" );
playfxontag( level.chopper_fx["explode"]["medium"], self, "tag_origin" );
self setyawspeed( var_0, var_0, var_0 );
while ( isdefined( self ) )
{
self settargetyaw( self.angles[1] + var_0 * 0.9 );
wait 1;
}
}
engagevehicle( var_0 )
{
var_0 endon( "death" );
var_0 endon( "leaving" );
var_0 endon( "crashing" );
self endon( "death" );
acquirevehicletarget( var_0 );
thread fireonvehicletarget();
}
fireonvehicletarget()
{
self endon( "leaving" );
self endon( "stopfiring" );
self endon( "explode" );
self.besttarget endon( "crashing" );
self.besttarget endon( "leaving" );
self.besttarget endon( "death" );
var_0 = gettime();
if ( isdefined( self.besttarget ) && self.besttarget.classname == "script_vehicle" )
{
self setturrettargetent( self.besttarget );
for (;;)
{
var_1 = distance2d( self.origin, self.besttarget.origin );
if ( gettime() - var_0 > 2500 && var_1 > 1000 )
{
firemissile( self.besttarget );
var_0 = gettime();
}
wait 0.1;
}
}
}
acquirevehicletarget( var_0 )
{
self endon( "death" );
self endon( "leaving" );
self notify( "newTarget" );
self.besttarget = var_0;
self notify( "acquiringVehTarget" );
self setlookatent( self.besttarget );
thread watchvehtargetdeath();
thread watchvehtargetcrash();
self setturrettargetent( self.besttarget );
}
watchvehtargetcrash()
{
self endon( "death" );
self endon( "leaving" );
self.besttarget endon( "death" );
self.besttarget endon( "drop_crate" );
self.besttarget waittill( "crashing" );
breakvehtarget();
}
watchvehtargetdeath()
{
self endon( "death" );
self endon( "leaving" );
self.besttarget endon( "crashing" );
self.besttarget endon( "drop_crate" );
self.besttarget waittill( "death" );
breakvehtarget();
}
breakvehtarget()
{
self clearlookatent();
if ( isdefined( self.besttarget ) && !isdefined( self.besttarget.nontarget ) )
self.besttarget.nontarget = 1;
self notify( "stopfiring" );
self notify( "newTarget" );
thread stopharrierwingfx();
thread engageground();
}
evasivemanuverone()
{
self setmaxpitchroll( 15, 80 );
self vehicle_setspeed( 50, 100 );
self setyawspeed( 90, 30, 30, 0.5 );
var_0 = self.origin;
var_1 = self.angles[1];
if ( common_scripts\utility::cointoss() )
var_2 = ( 0, var_1 + 90, 0 );
else
var_2 = ( 0, var_1 - 90, 0 );
var_3 = self.origin + anglestoforward( var_2 ) * 500;
self setvehgoalpos( var_3, 1 );
self waittill( "goal" );
}
addtohelilist()
{
level.helis[self getentitynumber()] = self;
}
removefromhelilistondeath()
{
var_0 = self getentitynumber();
self waittill( "death" );
level.helis[var_0] = undefined;
}
monitorowner()
{
self endon( "death" );
self endon( "leaving" );
if ( !isdefined( self.owner ) || self.owner.team != self.team )
{
thread harrierleave();
return;
}
self.owner common_scripts\utility::waittill_any( "joined_team", "disconnect" );
thread harrierleave();
}