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

892 lines
33 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.ospreysettings = [];
if ( level.script == "mp_character_room" )
return;
level.ospreysettings["escort_airdrop"] = spawnstruct();
level.ospreysettings["escort_airdrop"].vehicle = "osprey_mp";
level.ospreysettings["escort_airdrop"].modelbase = "vehicle_v22_osprey_body_mp";
level.ospreysettings["escort_airdrop"].modelblades = "vehicle_v22_osprey_blades_mp";
level.ospreysettings["escort_airdrop"].taghatchl = "tag_le_door_attach";
level.ospreysettings["escort_airdrop"].taghatchr = "tag_ri_door_attach";
level.ospreysettings["escort_airdrop"].tagdropcrates = "tag_turret_attach";
level.ospreysettings["escort_airdrop"].prompt = &"KILLSTREAKS_DEFEND_AIRDROP_PACKAGES";
level.ospreysettings["escort_airdrop"].name = &"KILLSTREAKS_ESCORT_AIRDROP";
level.ospreysettings["escort_airdrop"].weaponinfo = "osprey_minigun_mp";
level.ospreysettings["escort_airdrop"].helitype = "osprey";
level.ospreysettings["escort_airdrop"].droptype = "airdrop_escort";
level.ospreysettings["escort_airdrop"].maxhealth = level.heli_maxhealth * 2;
level.ospreysettings["escort_airdrop"].timeout = 60.0;
level.ospreysettings["osprey_gunner"] = spawnstruct();
level.ospreysettings["osprey_gunner"].vehicle = "osprey_player_mp";
level.ospreysettings["osprey_gunner"].modelbase = "vehicle_v22_osprey_body_mp";
level.ospreysettings["osprey_gunner"].modelblades = "vehicle_v22_osprey_blades_mp";
level.ospreysettings["osprey_gunner"].taghatchl = "tag_le_door_attach";
level.ospreysettings["osprey_gunner"].taghatchr = "tag_ri_door_attach";
level.ospreysettings["osprey_gunner"].tagdropcrates = "tag_turret_attach";
level.ospreysettings["osprey_gunner"].prompt = &"KILLSTREAKS_DEFEND_AIRDROP_PACKAGES";
level.ospreysettings["osprey_gunner"].name = &"KILLSTREAKS_OSPREY_GUNNER";
level.ospreysettings["osprey_gunner"].weaponinfo = "osprey_player_minigun_mp";
level.ospreysettings["osprey_gunner"].helitype = "osprey_gunner";
level.ospreysettings["osprey_gunner"].droptype = "airdrop_osprey_gunner";
level.ospreysettings["osprey_gunner"].maxhealth = level.heli_maxhealth * 2;
level.ospreysettings["osprey_gunner"].timeout = 75.0;
foreach ( var_1 in level.ospreysettings )
{
level.chopper_fx["explode"]["death"][var_1.modelbase] = loadfx( "fx/explosions/helicopter_explosion_osprey" );
level.chopper_fx["explode"]["air_death"][var_1.modelbase] = loadfx( "fx/explosions/helicopter_explosion_osprey_air_mp" );
level.chopper_fx["anim"]["blades_anim_up"][var_1.modelbase] = loadfx( "fx/props/osprey_blades_anim_up" );
level.chopper_fx["anim"]["blades_anim_down"][var_1.modelbase] = loadfx( "fx/props/osprey_blades_anim_down" );
level.chopper_fx["anim"]["blades_static_up"][var_1.modelbase] = loadfx( "fx/props/osprey_blades_up" );
level.chopper_fx["anim"]["blades_static_down"][var_1.modelbase] = loadfx( "fx/props/osprey_blades_default" );
level.chopper_fx["anim"]["hatch_left_static_up"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_left_default" );
level.chopper_fx["anim"]["hatch_left_anim_down"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_left_anim_open" );
level.chopper_fx["anim"]["hatch_left_static_down"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_left_up" );
level.chopper_fx["anim"]["hatch_left_anim_up"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_left_anim_close" );
level.chopper_fx["anim"]["hatch_right_static_up"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_right_default" );
level.chopper_fx["anim"]["hatch_right_anim_down"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_right_anim_open" );
level.chopper_fx["anim"]["hatch_right_static_down"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_right_up" );
level.chopper_fx["anim"]["hatch_right_anim_up"][var_1.modelbase] = loadfx( "fx/props/osprey_bottom_door_right_anim_close" );
}
level.air_support_locs = [];
level.killstreakfuncs["escort_airdrop"] = ::tryuseescortairdrop;
level.killstreakfuncs["osprey_gunner"] = ::tryuseospreygunner;
}
tryuseescortairdrop( var_0, var_1 )
{
var_2 = 1;
if ( isdefined( level.chopper ) )
{
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return 0;
}
if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_2 >= maps\mp\_utility::maxvehiclesallowed() )
{
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_VEHICLES" );
return 0;
}
if ( maps\mp\_utility::iskillstreakdenied() )
return 0;
maps\mp\_utility::incrementfauxvehiclecount();
var_4 = maps\mp\killstreaks\_airdrop::beginairdropviamarker( var_0, "escort_airdrop" );
if ( !isdefined( var_4 ) || !var_4 )
{
self notify( "markerDetermined" );
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
return 1;
}
tryuseospreygunner( var_0, var_1 )
{
var_2 = 1;
if ( isdefined( level.chopper ) )
{
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return 0;
}
if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_2 >= maps\mp\_utility::maxvehiclesallowed() )
{
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_VEHICLES" );
return 0;
}
maps\mp\_utility::incrementfauxvehiclecount();
var_4 = selectdroplocation( var_0, "osprey_gunner", "compass_objpoint_osprey_friendly", "compass_objpoint_osprey_enemy", &"KILLSTREAKS_SELECT_MOBILE_MORTAR_LOCATION" );
if ( !isdefined( var_4 ) || !var_4 )
{
maps\mp\_utility::decrementfauxvehiclecount();
return 0;
}
maps\mp\_matchdata::logkillstreakevent( "osprey_gunner", self.origin );
return 1;
}
finishsupportescortusage( var_0, var_1, var_2, var_3 )
{
self notify( "used" );
var_4 = ( 0, var_2, 0 );
var_5 = 12000;
var_6 = getent( "airstrikeheight", "targetname" );
var_7 = var_6.origin[2];
var_8 = level.heli_start_nodes[randomint( level.heli_start_nodes.size )];
var_9 = var_8.origin;
var_10 = ( var_1[0], var_1[1], var_7 );
var_11 = var_1 + anglestoforward( var_4 ) * var_5;
var_12 = vectortoangles( var_10 - var_9 );
var_13 = var_1;
var_1 = ( var_1[0], var_1[1], var_7 );
var_14 = createairship( self, var_0, var_9, var_12, var_1, var_3 );
var_9 = var_8;
usesupportescortairdrop( var_0, var_14, var_9, var_10, var_11, var_7, var_13 );
}
finishospreygunnerusage( var_0, var_1, var_2, var_3 )
{
self notify( "used" );
var_4 = ( 0, var_2, 0 );
var_5 = 12000;
var_6 = getent( "airstrikeheight", "targetname" );
var_7 = var_6.origin[2];
var_8 = level.heli_start_nodes[randomint( level.heli_start_nodes.size )];
var_9 = var_8.origin;
var_10 = ( var_1[0], var_1[1], var_7 );
var_11 = var_1 + anglestoforward( var_4 ) * var_5;
var_12 = vectortoangles( var_10 - var_9 );
var_1 = ( var_1[0], var_1[1], var_7 );
var_13 = createairship( self, var_0, var_9, var_12, var_1, var_3 );
var_9 = var_8;
useospreygunner( var_0, var_13, var_9, var_10, var_11, var_7 );
}
stopselectionwatcher()
{
self waittill( "stop_location_selection", var_0 );
switch ( var_0 )
{
case "emp":
case "weapon_change":
case "death":
case "cancel_location":
case "disconnect":
self notify( "customCancelLocation" );
break;
}
}
selectdroplocation( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "customCancelLocation" );
var_5 = undefined;
var_6 = level.mapsize / 6.46875;
if ( level.splitscreen )
var_6 = var_6 * 1.5;
maps\mp\_utility::_beginlocationselection( var_1, "map_artillery_selector", 0, 500 );
thread stopselectionwatcher();
self waittill( "confirm_location", var_7, var_8 );
maps\mp\_utility::stoplocationselection( 0 );
maps\mp\_utility::setusingremote( var_1 );
var_9 = maps\mp\killstreaks\_killstreaks::initridekillstreak( var_1 );
if ( var_9 != "success" )
{
if ( var_9 != "disconnect" )
maps\mp\_utility::clearusingremote();
return 0;
}
if ( isdefined( level.chopper ) )
{
maps\mp\_utility::clearusingremote();
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return 0;
}
else if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount >= maps\mp\_utility::maxvehiclesallowed() )
{
maps\mp\_utility::clearusingremote();
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_VEHICLES" );
return 0;
}
thread finishospreygunnerusage( var_0, var_7, var_8, var_1 );
return 1;
}
showicons( var_0, var_1, var_2, var_3 )
{
var_4 = maps\mp\gametypes\_hud_util::createfontstring( "bigfixed", 0.5 );
var_4 maps\mp\gametypes\_hud_util::setpoint( "CENTER", "CENTER", 0, -150 );
var_4 settext( var_2 );
self.locationobjectives = [];
for ( var_5 = 0; var_5 < var_3; var_5++ )
{
self.locationobjectives[var_5] = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( self.locationobjectives[var_5], "invisible", ( 0, 0, 0 ) );
objective_position( self.locationobjectives[var_5], level.air_support_locs[level.script][var_5]["origin"] );
objective_state( self.locationobjectives[var_5], "active" );
objective_player( self.locationobjectives[var_5], self getentitynumber() );
if ( level.air_support_locs[level.script][var_5]["in_use"] == 1 )
{
objective_icon( self.locationobjectives[var_5], var_1 );
continue;
}
objective_icon( self.locationobjectives[var_5], var_0 );
}
common_scripts\utility::waittill_any( "cancel_location", "picked_location", "stop_location_selection" );
var_4 maps\mp\gametypes\_hud_util::destroyelem();
for ( var_5 = 0; var_5 < var_3; var_5++ )
maps\mp\_utility::_objective_delete( self.locationobjectives[var_5] );
}
createairship( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = spawnhelicopter( var_0, var_2, var_3, level.ospreysettings[var_5].vehicle, level.ospreysettings[var_5].modelbase );
if ( !isdefined( var_6 ) )
return undefined;
var_6.ospreytype = var_5;
var_6.heli_type = level.ospreysettings[var_5].modelbase;
var_6.helitype = level.ospreysettings[var_5].helitype;
var_6.attractor = missile_createattractorent( var_6, level.heli_attract_strength, level.heli_attract_range );
var_6.lifeid = var_1;
var_6.team = var_0.pers["team"];
var_6.pers["team"] = var_0.pers["team"];
var_6.owner = var_0;
var_6 setotherent( var_0 );
var_6.maxhealth = level.ospreysettings[var_5].maxhealth;
var_6.zoffset = ( 0, 0, 0 );
var_6.targeting_delay = level.heli_targeting_delay;
var_6.primarytarget = undefined;
var_6.secondarytarget = undefined;
var_6.attacker = undefined;
var_6.currentstate = "ok";
var_6.droptype = level.ospreysettings[var_5].droptype;
var_6 common_scripts\utility::make_entity_sentient_mp( var_6.team );
level.chopper = var_6;
var_6 maps\mp\killstreaks\_helicopter::addtohelilist();
var_6 thread maps\mp\killstreaks\_flares::flares_monitor( 2 );
var_6 thread maps\mp\killstreaks\_helicopter::heli_leave_on_disconnect( var_0 );
var_6 thread maps\mp\killstreaks\_helicopter::heli_leave_on_changeteams( var_0 );
var_6 thread maps\mp\killstreaks\_helicopter::heli_leave_on_gameended( var_0 );
var_7 = level.ospreysettings[var_5].timeout;
var_6 thread maps\mp\killstreaks\_helicopter::heli_leave_on_timeout( var_7 );
var_6 thread maps\mp\killstreaks\_helicopter::heli_damage_monitor( var_5, 0 );
var_6 thread maps\mp\killstreaks\_helicopter::heli_health();
var_6 thread maps\mp\killstreaks\_helicopter::heli_existance();
var_6 thread airshipfx();
var_6 thread airshipfxonconnect();
if ( var_5 == "escort_airdrop" )
{
var_8 = var_6.origin + ( anglestoforward( var_6.angles ) * -200 + anglestoright( var_6.angles ) * -200 ) + ( 0, 0, 200 );
var_6.killcament = spawn( "script_model", var_8 );
var_6.killcament setscriptmoverkillcam( "explosive" );
var_6.killcament linkto( var_6, "tag_origin" );
}
return var_6;
}
airshipfx()
{
self endon( "death" );
wait 0.05;
playfxontag( level.chopper_fx["light"]["tail"], self, "tag_light_tail" );
wait 0.05;
playfxontag( level.chopper_fx["light"]["belly"], self, "tag_light_belly" );
wait 0.05;
playfxontag( level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
wait 0.05;
playfxontag( level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
wait 0.05;
playfxontag( level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
}
airshipfxonconnect()
{
self endon( "death" );
level endon( "game_ended" );
for (;;)
{
level waittill( "connected", var_0 );
thread airshipfxonclient( var_0 );
}
}
airshipfxonclient( var_0 )
{
self endon( "death" );
level endon( "game_ended" );
var_0 endon( "disconnect" );
wait 0.05;
playfxontagforclients( level.chopper_fx["light"]["tail"], self, "tag_light_tail", var_0 );
wait 0.05;
playfxontagforclients( level.chopper_fx["light"]["belly"], self, "tag_light_belly", var_0 );
if ( isdefined( self.propsstate ) )
{
if ( self.propsstate == "up" )
{
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH", var_0 );
}
else
{
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH", var_0 );
}
}
else
{
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH", var_0 );
}
if ( isdefined( self.hatchstate ) )
{
if ( self.hatchstate == "down" )
{
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl, var_0 );
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr, var_0 );
}
else
{
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl, var_0 );
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr, var_0 );
}
}
else
{
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl, var_0 );
wait 0.05;
playfxontagforclients( level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr, var_0 );
}
}
usesupportescortairdrop( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_1 thread airshipflydefense( self, var_2, var_3, var_4, var_5, var_6 );
}
useospreygunner( var_0, var_1, var_2, var_3, var_4, var_5 )
{
thread ridegunner( var_0, var_1 );
var_1 thread airshipflygunner( self, var_2, var_3, var_4, var_5 );
}
ridegunner( var_0, var_1 )
{
self endon( "disconnect" );
var_1 endon( "helicopter_done" );
thread maps\mp\_utility::teamplayercardsplash( "used_osprey_gunner", self );
maps\mp\_utility::_giveweapon( "heli_remote_mp" );
self switchtoweapon( "heli_remote_mp" );
if ( getdvarint( "camera_thirdPerson" ) )
maps\mp\_utility::setthirdpersondof( 0 );
var_1 vehicleturretcontrolon( self );
self playerlinkweaponviewtodelta( var_1, "tag_player", 1.0, 0, 0, 0, 0, 1 );
self setplayerangles( var_1 gettagangles( "tag_player" ) );
var_1 thread maps\mp\killstreaks\_helicopter::heli_targeting();
var_1.gunner = self;
self.heliridelifeid = var_0;
thread endrideonairshipdone( var_1 );
thread waitsetthermal( 1.0, var_1 );
thread maps\mp\_utility::reinitializethermal( var_1 );
for (;;)
{
var_1 waittill( "turret_fire" );
var_1 fireweapon();
earthquake( 0.2, 1, var_1.origin, 1000 );
}
}
waitsetthermal( var_0, var_1 )
{
self endon( "disconnect" );
var_1 endon( "death" );
var_1 endon( "helicopter_done" );
var_1 endon( "crashing" );
var_1 endon( "leaving" );
wait( var_0 );
self visionsetthermalforplayer( level.ac130.enhanced_vision, 0 );
self.lastvisionsetthermal = level.ac130.enhanced_vision;
self thermalvisionon();
self thermalvisionfofoverlayon();
}
showdefendprompt( var_0 )
{
self endon( "disconnect" );
var_0 endon( "helicopter_done" );
self.escort_prompt = maps\mp\gametypes\_hud_util::createfontstring( "bigfixed", 1.5 );
self.escort_prompt maps\mp\gametypes\_hud_util::setpoint( "CENTER", "CENTER", 0, -150 );
self.escort_prompt settext( level.ospreysettings[var_0.ospreytype].prompt );
wait 6;
if ( isdefined( self.escort_prompt ) )
self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem();
}
airshippitchpropsup()
{
self endon( "crashing" );
self endon( "death" );
stopfxontag( level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
playfxontag( level.chopper_fx["anim"]["blades_anim_up"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
wait 1.0;
if ( isdefined( self ) )
{
playfxontag( level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
self.propsstate = "up";
}
}
airshippitchpropsdown()
{
self endon( "crashing" );
self endon( "death" );
stopfxontag( level.chopper_fx["anim"]["blades_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
playfxontag( level.chopper_fx["anim"]["blades_anim_down"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
wait 1.0;
if ( isdefined( self ) )
{
playfxontag( level.chopper_fx["anim"]["blades_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, "TAG_BLADES_ATTACH" );
self.propsstate = "down";
}
}
airshippitchhatchup()
{
self endon( "crashing" );
self endon( "death" );
stopfxontag( level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
playfxontag( level.chopper_fx["anim"]["hatch_left_anim_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
stopfxontag( level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
playfxontag( level.chopper_fx["anim"]["hatch_right_anim_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
wait 1.0;
if ( isdefined( self ) )
{
playfxontag( level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
playfxontag( level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
self.hatchstate = "up";
}
}
airshippitchhatchdown()
{
self endon( "crashing" );
self endon( "death" );
stopfxontag( level.chopper_fx["anim"]["hatch_left_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
playfxontag( level.chopper_fx["anim"]["hatch_left_anim_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
stopfxontag( level.chopper_fx["anim"]["hatch_right_static_up"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
playfxontag( level.chopper_fx["anim"]["hatch_right_anim_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
wait 1.0;
if ( isdefined( self ) )
{
playfxontag( level.chopper_fx["anim"]["hatch_left_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchl );
playfxontag( level.chopper_fx["anim"]["hatch_right_static_down"][level.ospreysettings[self.ospreytype].modelbase], self, level.ospreysettings[self.ospreytype].taghatchr );
self.hatchstate = "down";
}
self notify( "hatch_down" );
}
getbestheight( var_0 )
{
self endon( "helicopter_removed" );
self endon( "heightReturned" );
var_1 = getent( "airstrikeheight", "targetname" );
if ( isdefined( var_1 ) )
var_2 = var_1.origin[2];
else if ( isdefined( level.airstrikeheightscale ) )
var_2 = 850 * level.airstrikeheightscale;
else
var_2 = 850;
self.bestheight = var_2;
var_3 = 200;
var_4 = 0;
var_5 = 0;
for ( var_6 = 0; var_6 < 125; var_6++ )
{
wait 0.05;
var_7 = var_6 % 8;
var_8 = var_6 * 3;
switch ( var_7 )
{
case 0:
var_4 = var_8;
var_5 = var_8;
break;
case 1:
var_4 = var_8 * -1;
var_5 = var_8 * -1;
break;
case 2:
var_4 = var_8 * -1;
var_5 = var_8;
break;
case 3:
var_4 = var_8;
var_5 = var_8 * -1;
break;
case 4:
var_4 = 0;
var_5 = var_8 * -1;
break;
case 5:
var_4 = var_8 * -1;
var_5 = 0;
break;
case 6:
var_4 = var_8;
var_5 = 0;
break;
case 7:
var_4 = 0;
var_5 = var_8;
break;
default:
break;
}
var_9 = bullettrace( var_0 + ( var_4, var_5, 1000 ), var_0 + ( var_4, var_5, -10000 ), 1, self );
if ( var_9["position"][2] > var_3 )
var_3 = var_9["position"][2];
}
self.bestheight = var_3 + 300;
switch ( getdvar( "mapname" ) )
{
case "mp_morningwood":
self.bestheight = self.bestheight + 600;
break;
case "mp_overwatch":
var_10 = level.spawnpoints;
var_11 = var_10[0];
var_12 = var_10[0];
foreach ( var_14 in var_10 )
{
if ( var_14.origin[2] < var_11.origin[2] )
var_11 = var_14;
if ( var_14.origin[2] > var_12.origin[2] )
var_12 = var_14;
}
if ( var_3 < var_11.origin[2] - 100 )
self.bestheight = var_12.origin[2] + 900;
break;
}
}
airshipflydefense( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self notify( "airshipFlyDefense" );
self endon( "airshipFlyDefense" );
self endon( "helicopter_removed" );
self endon( "death" );
self endon( "leaving" );
thread getbestheight( var_2 );
maps\mp\killstreaks\_helicopter::heli_fly_simple_path( var_1 );
self.pathgoal = var_2;
var_6 = self.angles;
self setyawspeed( 30, 30, 30, 0.3 );
var_7 = self.origin;
var_8 = self.angles[1];
var_9 = self.angles[0];
self.timeout = level.ospreysettings[self.ospreytype].timeout;
self setvehgoalpos( var_2, 1 );
var_10 = gettime();
self waittill( "goal" );
var_11 = ( gettime() - var_10 ) * 0.001;
self.timeout = self.timeout - var_11;
thread airshippitchpropsup();
var_12 = var_2 * ( 1, 1, 0 );
var_12 = var_12 + ( 0, 0, self.bestheight );
self vehicle_setspeed( 25, 10, 10 );
self setyawspeed( 20, 10, 10, 0.3 );
self setvehgoalpos( var_12, 1 );
var_10 = gettime();
self waittill( "goal" );
var_11 = ( gettime() - var_10 ) * 0.001;
self.timeout = self.timeout - var_11;
self sethoverparams( 65, 50, 50 );
ospreydropcrateslowimpulse( 1, level.ospreysettings[self.ospreytype].tagdropcrates, var_12 );
thread killguysnearcrates( var_5 );
if ( isdefined( var_0 ) )
var_0 common_scripts\utility::waittill_any_timeout( self.timeout, "disconnect" );
self waittill( "leaving" );
self notify( "osprey_leaving" );
thread airshippitchpropsdown();
}
wait_and_delete( var_0 )
{
self endon( "death" );
level endon( "game_ended" );
wait( var_0 );
self delete();
}
killguysnearcrates( var_0 )
{
self endon( "osprey_leaving" );
self endon( "helicopter_removed" );
self endon( "death" );
var_1 = var_0;
for (;;)
{
foreach ( var_3 in level.players )
{
wait 0.05;
if ( !isdefined( self ) )
return;
if ( !isdefined( var_3 ) )
continue;
if ( !maps\mp\_utility::isreallyalive( var_3 ) )
continue;
if ( !self.owner maps\mp\_utility::isenemy( var_3 ) )
continue;
if ( var_3 maps\mp\_utility::_hasperk( "specialty_blindeye" ) )
continue;
if ( distancesquared( var_1, var_3.origin ) > 500000 )
continue;
thread aishootplayer( var_3, var_1 );
waitforconfirmation();
}
}
}
aishootplayer( var_0, var_1 )
{
self notify( "aiShootPlayer" );
self endon( "aiShootPlayer" );
self endon( "helicopter_removed" );
self endon( "leaving" );
var_0 endon( "death" );
self setturrettargetent( var_0 );
self setlookatent( var_0 );
thread targetdeathwaiter( var_0 );
var_2 = 6;
var_3 = 2;
for (;;)
{
var_2--;
self fireweapon( "tag_flash", var_0 );
wait 0.15;
if ( var_2 <= 0 )
{
var_3--;
var_2 = 6;
if ( distancesquared( var_0.origin, var_1 ) > 500000 || var_3 <= 0 || !maps\mp\_utility::isreallyalive( var_0 ) )
{
self notify( "abandon_target" );
return;
}
wait 1;
}
}
}
targetdeathwaiter( var_0 )
{
self endon( "abandon_target" );
self endon( "leaving" );
self endon( "helicopter_removed" );
var_0 waittill( "death" );
self notify( "target_killed" );
}
waitforconfirmation()
{
self endon( "helicopter_removed" );
self endon( "leaving" );
self endon( "target_killed" );
self endon( "abandon_target" );
for (;;)
wait 0.05;
}
airshipflygunner( var_0, var_1, var_2, var_3, var_4 )
{
self notify( "airshipFlyGunner" );
self endon( "airshipFlyGunner" );
self endon( "helicopter_removed" );
self endon( "death" );
self endon( "leaving" );
thread getbestheight( var_2 );
maps\mp\killstreaks\_helicopter::heli_fly_simple_path( var_1 );
thread maps\mp\killstreaks\_helicopter::heli_leave_on_timeout( level.ospreysettings[self.ospreytype].timeout );
var_5 = self.angles;
self setyawspeed( 30, 30, 30, 0.3 );
var_6 = self.origin;
var_7 = self.angles[1];
var_8 = self.angles[0];
self.timeout = level.ospreysettings[self.ospreytype].timeout;
self setvehgoalpos( var_2, 1 );
var_9 = gettime();
self waittill( "goal" );
var_10 = ( gettime() - var_9 ) * 0.001;
self.timeout = self.timeout - var_10;
thread airshippitchpropsup();
var_11 = var_2 * ( 1, 1, 0 );
var_11 = var_11 + ( 0, 0, self.bestheight );
self vehicle_setspeed( 25, 10, 10 );
self setyawspeed( 20, 10, 10, 0.3 );
self setvehgoalpos( var_11, 1 );
var_9 = gettime();
self waittill( "goal" );
var_10 = ( gettime() - var_9 ) * 0.001;
self.timeout = self.timeout - var_10;
ospreydropcrates( 1, level.ospreysettings[self.ospreytype].tagdropcrates, var_11 );
var_12 = 1.0;
if ( isdefined( var_0 ) )
var_0 common_scripts\utility::waittill_any_timeout( var_12, "disconnect" );
self.timeout = self.timeout - var_12;
self setvehgoalpos( var_2, 1 );
var_9 = gettime();
self waittill( "goal" );
var_10 = ( gettime() - var_9 ) * 0.001;
self.timeout = self.timeout - var_10;
var_13 = getentarray( "heli_attack_area", "targetname" );
var_14 = level.heli_loop_nodes[randomint( level.heli_loop_nodes.size )];
if ( var_13.size )
thread maps\mp\killstreaks\_helicopter::heli_fly_well( var_13 );
else
thread maps\mp\killstreaks\_helicopter::heli_fly_loop_path( var_14 );
self waittill( "leaving" );
thread airshippitchpropsdown();
}
ospreydropcrateslowimpulse( var_0, var_1, var_2 )
{
thread airshippitchhatchdown();
self waittill( "hatch_down" );
level notify( "escort_airdrop_started", self );
var_3[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ), undefined, var_1 );
wait 0.05;
self notify( "drop_crate" );
wait( var_0 );
var_3[1] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomint( 100 ), randomint( 100 ), randomint( 100 ) ), var_3, var_1 );
wait 0.05;
self notify( "drop_crate" );
wait( var_0 );
var_3[2] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomint( 50 ), randomint( 50 ), randomint( 50 ) ), var_3, var_1 );
wait 0.05;
self notify( "drop_crate" );
wait( var_0 );
var_3[3] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomintrange( -100, 0 ), randomintrange( -100, 0 ), randomintrange( -100, 0 ) ), var_3, var_1 );
wait 0.05;
self notify( "drop_crate" );
wait( var_0 );
thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomintrange( -50, 0 ), randomintrange( -50, 0 ), randomintrange( -50, 0 ) ), var_3, var_1 );
wait 0.05;
self notify( "drop_crate" );
wait 1.0;
thread airshippitchhatchup();
}
ospreydropcrates( var_0, var_1, var_2 )
{
thread airshippitchhatchdown();
self waittill( "hatch_down" );
var_3[0] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ), undefined, var_1 );
wait 0.05;
self.timeout = self.timeout - 0.05;
self notify( "drop_crate" );
wait( var_0 );
self.timeout = self.timeout - var_0;
var_3[1] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomint( 100 ), randomint( 100 ), randomint( 100 ) ), var_3, var_1 );
wait 0.05;
self.timeout = self.timeout - 0.05;
self notify( "drop_crate" );
wait( var_0 );
self.timeout = self.timeout - var_0;
var_3[2] = thread maps\mp\killstreaks\_airdrop::dropthecrate( undefined, self.droptype, undefined, 0, undefined, self.origin, ( randomint( 50 ), randomint( 50 ), randomint( 50 ) ), var_3, var_1 );
wait 0.05;
self.timeout = self.timeout - 0.05;
self notify( "drop_crate" );
wait 1.0;
thread airshippitchhatchup();
}
endride( var_0 )
{
if ( isdefined( self.escort_prompt ) )
self.escort_prompt maps\mp\gametypes\_hud_util::destroyelem();
self remotecamerasoundscapeoff();
self thermalvisionoff();
self thermalvisionfofoverlayoff();
self unlink();
maps\mp\_utility::clearusingremote();
if ( getdvarint( "camera_thirdPerson" ) )
maps\mp\_utility::setthirdpersondof( 1 );
self visionsetthermalforplayer( game["thermal_vision"], 0 );
if ( isdefined( var_0 ) )
var_0 vehicleturretcontroloff( self );
self notify( "heliPlayer_removed" );
self switchtoweapon( common_scripts\utility::getlastweapon() );
self takeweapon( "heli_remote_mp" );
}
endrideonairshipdone( var_0 )
{
self endon( "disconnect" );
var_0 waittill( "helicopter_done" );
endride( var_0 );
}