iw6-scripts/maps/mp/killstreaks/_air_superiority.gsc
2024-02-13 13:20:49 +01:00

217 lines
6.8 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
var_0 = spawnstruct();
var_0.modelnames = [];
var_0.modelnames["allies"] = "vehicle_a10_warthog_iw6_mp";
var_0.modelnames["axis"] = "vehicle_a10_warthog_iw6_mp";
var_0.inboundsfx = "veh_mig29_dist_loop";
var_0.compassiconfriendly = "compass_objpoint_airstrike_friendly";
var_0.compassiconenemy = "compass_objpoint_airstrike_busy";
var_0.speed = 4000;
var_0.halfdistance = 20000;
var_0.distfromplayer = 4000;
var_0.heightrange = 250;
var_0.nummissilevolleys = 3;
var_0.outboundflightanim = "airstrike_mp_roll";
var_0.sonicboomsfx = "veh_mig29_sonic_boom";
var_0.onattackdelegate = ::attackenemyaircraft;
var_0.onflybycompletedelegate = ::cleanupflyby;
var_0.xppopup = "destroyed_air_superiority";
var_0.callout = "callout_destroyed_air_superiority";
var_0.vodestroyed = undefined;
var_0.killcamoffset = ( -800, 0, 200 );
level.planeconfigs["air_superiority"] = var_0;
level.killstreakfuncs["air_superiority"] = ::onuse;
level.teamairdenied["axis"] = 0;
level.teamairdenied["allies"] = 0;
}
onuse( var_0, var_1 )
{
var_2 = maps\mp\_utility::getotherteam( self.team );
if ( level.teambased && level.teamairdenied[var_2] || !level.teambased && isdefined( level.airdeniedplayer ) && level.airdeniedplayer == self )
{
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return 0;
}
else
{
thread dostrike( var_0, "air_superiority" );
maps\mp\_matchdata::logkillstreakevent( "air_superiority", self.origin );
thread maps\mp\_utility::teamplayercardsplash( "used_air_superiority", self );
return 1;
}
}
dostrike( var_0, var_1 )
{
var_2 = level.planeconfigs[var_1];
var_3 = maps\mp\killstreaks\_plane::getplaneflightplan( var_2.distfromplayer );
wait 1;
var_4 = maps\mp\_utility::getotherteam( self.team );
level.teamairdenied[var_4] = 1;
level.airdeniedplayer = self;
dooneflyby( var_1, var_0, var_3.targetpos, var_3.flightdir, var_3.height );
self waittill( "aa_flyby_complete" );
wait 2;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if ( isdefined( self ) )
{
dooneflyby( var_1, var_0, var_3.targetpos, -1 * var_3.flightdir, var_3.height );
self waittill( "aa_flyby_complete" );
}
level.teamairdenied[var_4] = 0;
level.airdeniedplayer = undefined;
}
dooneflyby( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = level.planeconfigs[var_0];
var_6 = maps\mp\killstreaks\_plane::getflightpath( var_2, var_3, var_5.halfdistance, 1, var_4, var_5.speed, -0.5 * var_5.halfdistance, var_0 );
level thread maps\mp\killstreaks\_plane::doflyby( var_1, self, var_1, var_6["startPoint"] + ( 0, 0, randomint( var_5.heightrange ) ), var_6["endPoint"] + ( 0, 0, randomint( var_5.heightrange ) ), var_6["attackTime"], var_6["flyTime"], var_3, var_0 );
}
attackenemyaircraft( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "death" );
self.owner endon( "killstreak_disowned" );
level endon( "game_ended" );
wait( var_2 );
var_5 = findalltargets( self.owner, self.team );
var_6 = level.planeconfigs[var_4];
var_7 = var_6.nummissilevolleys;
for ( var_8 = var_5.size - 1; var_8 >= 0 && var_7 > 0; var_8-- )
{
var_9 = var_5[var_8];
if ( isdefined( var_9 ) && isalive( var_9 ) )
{
fireattarget( var_9 );
var_7--;
wait 1;
}
}
}
cleanupflyby( var_0, var_1, var_2 )
{
var_0 notify( "aa_flyby_complete" );
}
findtargetsoftype( var_0, var_1, var_2, var_3, var_4 )
{
if ( isdefined( var_3 ) )
{
foreach ( var_6 in var_3 )
{
if ( [[ var_2 ]]( var_0, var_1, var_6 ) )
var_4.targets[var_4.targets.size] = var_6;
}
}
return var_4;
}
findalltargets( var_0, var_1 )
{
var_2 = spawnstruct();
var_2.targets = [];
var_3 = undefined;
if ( level.teambased )
var_3 = maps\mp\_utility::isvalidteamtarget;
else
var_3 = maps\mp\_utility::isvalidffatarget;
var_4 = undefined;
if ( isdefined( var_1 ) )
var_4 = maps\mp\_utility::getotherteam( var_1 );
findtargetsoftype( var_0, var_4, var_3, level.heli_pilot, var_2 );
if ( isdefined( level.lbsniper ) )
{
if ( [[ var_3 ]]( var_0, var_4, level.lbsniper ) )
var_2.targets[var_2.targets.size] = level.lbsniper;
}
findtargetsoftype( var_0, var_4, var_3, level.planes, var_2 );
findtargetsoftype( var_0, var_4, var_3, level.littlebirds, var_2 );
findtargetsoftype( var_0, var_4, var_3, level.helis, var_2 );
return var_2.targets;
}
fireattarget( var_0 )
{
if ( !isdefined( var_0 ) )
return;
var_1 = undefined;
if ( isdefined( self.owner ) )
var_1 = self.owner;
var_2 = 384 * anglestoforward( self.angles );
var_3 = self gettagorigin( "tag_missile_1" ) + var_2;
var_4 = magicbullet( "aamissile_projectile_mp", var_3, var_3 + var_2, var_1 );
var_4.vehicle_fired_from = self;
var_3 = self gettagorigin( "tag_missile_2" ) + var_2;
var_5 = magicbullet( "aamissile_projectile_mp", var_3, var_3 + var_2, var_1 );
var_5.vehicle_fired_from = self;
var_6 = [ var_4, var_5 ];
var_0 notify( "targeted_by_incoming_missile", var_6 );
thread startmissileguidance( var_0, 0.25, var_6 );
}
startmissileguidance( var_0, var_1, var_2 )
{
wait( var_1 );
if ( isdefined( var_0 ) )
{
var_3 = undefined;
if ( var_0.model != "vehicle_av8b_harrier_jet_mp" )
var_3 = var_0 gettagorigin( "tag_missile_target" );
if ( !isdefined( var_3 ) )
var_3 = var_0 gettagorigin( "tag_body" );
var_4 = var_3 - var_0.origin;
foreach ( var_6 in var_2 )
{
if ( isvalidmissile( var_6 ) )
{
var_6 missile_settargetent( var_0, var_4 );
var_6 missile_setflightmodedirect();
}
}
}
}
destroyactivevehicles( var_0, var_1 )
{
maps\mp\killstreaks\_killstreaks::destroytargetarray( var_0, var_1, "aamissile_projectile_mp", level.helis );
maps\mp\killstreaks\_killstreaks::destroytargetarray( var_0, var_1, "aamissile_projectile_mp", level.littlebirds );
maps\mp\killstreaks\_killstreaks::destroytargetarray( var_0, var_1, "aamissile_projectile_mp", level.heli_pilot );
if ( isdefined( level.lbsniper ) )
{
var_2 = [];
var_2[0] = level.lbsniper;
maps\mp\killstreaks\_killstreaks::destroytargetarray( var_0, var_1, "aamissile_projectile_mp", var_2 );
}
maps\mp\killstreaks\_killstreaks::destroytargetarray( var_0, var_1, "aamissile_projectile_mp", level.remote_uav );
maps\mp\killstreaks\_killstreaks::destroytargetarray( var_0, var_1, "aamissile_projectile_mp", level.planes );
}