892 lines
33 KiB
Plaintext
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 );
|
|
}
|