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

1678 lines
51 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.ac130_use_duration = 40;
angelflareprecache();
level._effect["cloud"] = loadfx( "fx/misc/ac130_cloud" );
level._effect["beacon"] = loadfx( "fx/misc/ir_beacon_coop" );
level._effect["ac130_explode"] = loadfx( "fx/explosions/aerial_explosion_ac130_coop" );
level._effect["ac130_flare"] = loadfx( "fx/misc/flares_cobra" );
level._effect["ac130_light_red"] = loadfx( "fx/misc/aircraft_light_wingtip_red" );
level._effect["ac130_light_white_blink"] = loadfx( "fx/misc/aircraft_light_white_blink" );
level._effect["ac130_light_red_blink"] = loadfx( "fx/misc/aircraft_light_red_blink" );
level._effect["ac130_engineeffect"] = loadfx( "fx/fire/jet_engine_ac130" );
level._effect["coop_muzzleflash_105mm"] = loadfx( "fx/muzzleflashes/ac130_105mm" );
level._effect["coop_muzzleflash_40mm"] = loadfx( "fx/muzzleflashes/ac130_40mm" );
level.radioforcedtransmissionqueue = [];
level.enemieskilledintimewindow = 0;
level.lastradiotransmission = gettime();
level.color["white"] = ( 1, 1, 1 );
level.color["red"] = ( 1, 0, 0 );
level.color["blue"] = ( 0.1, 0.3, 1 );
level.cosine = [];
level.cosine["45"] = cos( 45 );
level.cosine["5"] = cos( 5 );
level.physicssphereradius["ac130_25mm_mp"] = 60;
level.physicssphereradius["ac130_40mm_mp"] = 600;
level.physicssphereradius["ac130_105mm_mp"] = 1000;
level.physicssphereforce["ac130_25mm_mp"] = 0;
level.physicssphereforce["ac130_40mm_mp"] = 3.0;
level.physicssphereforce["ac130_105mm_mp"] = 6.0;
level.weaponreloadtime["ac130_25mm_mp"] = 1.5;
level.weaponreloadtime["ac130_40mm_mp"] = 3.0;
level.weaponreloadtime["ac130_105mm_mp"] = 5.0;
level.ac130_speed["move"] = 250;
level.ac130_speed["rotate"] = 70;
common_scripts\utility::flag_init( "allow_context_sensative_dialog" );
common_scripts\utility::flag_set( "allow_context_sensative_dialog" );
var_0 = getentarray( "minimap_corner", "targetname" );
var_1 = ( 0, 0, 0 );
if ( var_0.size )
var_1 = maps\mp\gametypes\_spawnlogic::findboxcenter( var_0[0].origin, var_0[1].origin );
level.ac130 = spawn( "script_model", var_1 );
level.ac130 setmodel( "c130_zoomRig" );
level.ac130.angles = ( 0, 115, 0 );
level.ac130.owner = undefined;
level.ac130.thermal_vision = "ac130_thermal_mp";
level.ac130.enhanced_vision = "ac130_enhanced_mp";
level.ac130.targetname = "ac130rig_script_model";
level.ac130 hide();
level.ac130inuse = 0;
thread rotateplane( "on" );
thread ac130_spawn();
thread onplayerconnect();
level.killstreakfuncs["ac130"] = ::tryuseac130;
level.ac130queue = [];
}
tryuseac130( var_0, var_1 )
{
if ( isdefined( level.ac130player ) || level.ac130inuse )
{
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
return 0;
}
if ( maps\mp\_utility::isusingremote() )
return 0;
if ( maps\mp\_utility::iskillstreakdenied() )
return 0;
maps\mp\_utility::setusingremote( "ac130" );
var_2 = maps\mp\killstreaks\_killstreaks::initridekillstreak( var_1 );
if ( var_2 != "success" )
{
if ( var_2 != "disconnect" )
maps\mp\_utility::clearusingremote();
return 0;
}
var_2 = setac130player( self );
if ( isdefined( var_2 ) && var_2 )
{
level.ac130.planemodel.crashed = undefined;
level.ac130inuse = 1;
}
else
maps\mp\_utility::clearusingremote();
return isdefined( var_2 ) && var_2;
}
init_sounds()
{
level.scr_sound["foo"]["bar"] = "";
add_context_sensative_dialog( "ai", "in_sight", 0, "ac130_fco_getthatguy" );
add_context_sensative_dialog( "ai", "in_sight", 1, "ac130_fco_guymovin" );
add_context_sensative_dialog( "ai", "in_sight", 2, "ac130_fco_getperson" );
add_context_sensative_dialog( "ai", "in_sight", 3, "ac130_fco_guyrunnin" );
add_context_sensative_dialog( "ai", "in_sight", 4, "ac130_fco_gotarunner" );
add_context_sensative_dialog( "ai", "in_sight", 5, "ac130_fco_backonthose" );
add_context_sensative_dialog( "ai", "in_sight", 6, "ac130_fco_gonnagethim" );
add_context_sensative_dialog( "ai", "in_sight", 7, "ac130_fco_nailthoseguys" );
add_context_sensative_dialog( "ai", "in_sight", 8, "ac130_fco_lightemup" );
add_context_sensative_dialog( "ai", "in_sight", 9, "ac130_fco_takehimout" );
add_context_sensative_dialog( "ai", "in_sight", 10, "ac130_plt_yeahcleared" );
add_context_sensative_dialog( "ai", "in_sight", 11, "ac130_plt_copysmoke" );
add_context_sensative_dialog( "ai", "wounded_crawl", 0, "ac130_fco_movingagain" );
add_context_sensative_timeout( "ai", "wounded_crawl", undefined, 6 );
add_context_sensative_dialog( "ai", "wounded_pain", 0, "ac130_fco_doveonground" );
add_context_sensative_dialog( "ai", "wounded_pain", 1, "ac130_fco_knockedwind" );
add_context_sensative_dialog( "ai", "wounded_pain", 2, "ac130_fco_downstillmoving" );
add_context_sensative_dialog( "ai", "wounded_pain", 3, "ac130_fco_gettinbackup" );
add_context_sensative_dialog( "ai", "wounded_pain", 4, "ac130_fco_yepstillmoving" );
add_context_sensative_dialog( "ai", "wounded_pain", 5, "ac130_fco_stillmoving" );
add_context_sensative_timeout( "ai", "wounded_pain", undefined, 12 );
add_context_sensative_dialog( "weapons", "105mm_ready", 0, "ac130_gnr_gunready1" );
add_context_sensative_dialog( "weapons", "105mm_fired", 0, "ac130_gnr_shot1" );
add_context_sensative_dialog( "plane", "rolling_in", 0, "ac130_plt_rollinin" );
add_context_sensative_dialog( "explosion", "secondary", 0, "ac130_nav_secondaries1" );
add_context_sensative_timeout( "explosion", "secondary", undefined, 7 );
add_context_sensative_dialog( "kill", "single", 0, "ac130_plt_gottahurt" );
add_context_sensative_dialog( "kill", "single", 1, "ac130_fco_iseepieces" );
add_context_sensative_dialog( "kill", "single", 2, "ac130_fco_oopsiedaisy" );
add_context_sensative_dialog( "kill", "single", 3, "ac130_fco_goodkill" );
add_context_sensative_dialog( "kill", "single", 4, "ac130_fco_yougothim" );
add_context_sensative_dialog( "kill", "single", 5, "ac130_fco_yougothim2" );
add_context_sensative_dialog( "kill", "single", 6, "ac130_fco_thatsahit" );
add_context_sensative_dialog( "kill", "single", 7, "ac130_fco_directhit" );
add_context_sensative_dialog( "kill", "single", 8, "ac130_fco_rightontarget" );
add_context_sensative_dialog( "kill", "single", 9, "ac130_fco_okyougothim" );
add_context_sensative_dialog( "kill", "single", 10, "ac130_fco_within2feet" );
add_context_sensative_dialog( "kill", "small_group", 0, "ac130_fco_nice" );
add_context_sensative_dialog( "kill", "small_group", 1, "ac130_fco_directhits" );
add_context_sensative_dialog( "kill", "small_group", 2, "ac130_fco_iseepieces" );
add_context_sensative_dialog( "kill", "small_group", 3, "ac130_fco_goodkill" );
add_context_sensative_dialog( "kill", "small_group", 4, "ac130_fco_yougothim" );
add_context_sensative_dialog( "kill", "small_group", 5, "ac130_fco_yougothim2" );
add_context_sensative_dialog( "kill", "small_group", 6, "ac130_fco_thatsahit" );
add_context_sensative_dialog( "kill", "small_group", 7, "ac130_fco_directhit" );
add_context_sensative_dialog( "kill", "small_group", 8, "ac130_fco_rightontarget" );
add_context_sensative_dialog( "kill", "small_group", 9, "ac130_fco_okyougothim" );
add_context_sensative_dialog( "misc", "action", 0, "ac130_fco_tracking" );
add_context_sensative_timeout( "misc", "action", 0, 70 );
add_context_sensative_dialog( "misc", "action", 1, "ac130_fco_moreenemy" );
add_context_sensative_timeout( "misc", "action", 1, 80 );
add_context_sensative_dialog( "misc", "action", 2, "ac130_random" );
add_context_sensative_timeout( "misc", "action", 2, 55 );
add_context_sensative_dialog( "misc", "action", 3, "ac130_fco_rightthere" );
add_context_sensative_timeout( "misc", "action", 3, 100 );
}
add_context_sensative_dialog( var_0, var_1, var_2, var_3 )
{
var_4 = maps\mp\gametypes\_teams::getteamvoiceprefix( "allies" ) + var_3;
var_4 = maps\mp\gametypes\_teams::getteamvoiceprefix( "axis" ) + var_3;
if ( !isdefined( level.scr_sound[var_0] ) || !isdefined( level.scr_sound[var_0][var_1] ) || !isdefined( level.scr_sound[var_0][var_1][var_2] ) )
{
level.scr_sound[var_0][var_1][var_2] = spawnstruct();
level.scr_sound[var_0][var_1][var_2].played = 0;
level.scr_sound[var_0][var_1][var_2].sounds = [];
}
var_5 = level.scr_sound[var_0][var_1][var_2].sounds.size;
level.scr_sound[var_0][var_1][var_2].sounds[var_5] = var_3;
}
add_context_sensative_timeout( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( level.context_sensative_dialog_timeouts ) )
level.context_sensative_dialog_timeouts = [];
var_4 = 0;
if ( !isdefined( level.context_sensative_dialog_timeouts[var_0] ) )
var_4 = 1;
else if ( !isdefined( level.context_sensative_dialog_timeouts[var_0][var_1] ) )
var_4 = 1;
if ( var_4 )
level.context_sensative_dialog_timeouts[var_0][var_1] = spawnstruct();
if ( isdefined( var_2 ) )
{
level.context_sensative_dialog_timeouts[var_0][var_1].groups = [];
level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )] = spawnstruct();
level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )].v["timeoutDuration"] = var_3 * 1000;
level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )].v["lastPlayed"] = var_3 * -1000;
}
else
{
level.context_sensative_dialog_timeouts[var_0][var_1].v["timeoutDuration"] = var_3 * 1000;
level.context_sensative_dialog_timeouts[var_0][var_1].v["lastPlayed"] = var_3 * -1000;
}
}
play_sound_on_entity( var_0 )
{
maps\mp\_utility::play_sound_on_tag( var_0 );
}
array_remove_nokeys( var_0, var_1 )
{
var_2 = [];
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
{
if ( var_0[var_3] != var_1 )
var_2[var_2.size] = var_0[var_3];
}
return var_2;
}
array_remove_index( var_0, var_1 )
{
var_2 = [];
var_3 = getarraykeys( var_0 );
for ( var_4 = var_3.size - 1; var_4 >= 0; var_4-- )
{
if ( var_3[var_4] != var_1 )
var_2[var_2.size] = var_0[var_3[var_4]];
}
return var_2;
}
string( var_0 )
{
return "" + var_0;
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
self waittill( "spawned_player" );
}
deleteonac130playerremoved()
{
level waittill( "ac130player_removed" );
self delete();
}
monitormanualplayerexit()
{
level endon( "game_ended" );
level endon( "ac130player_removed" );
self endon( "disconnect" );
level.ac130 thread maps\mp\killstreaks\_killstreaks::allowridekillstreakplayerexit();
level.ac130 waittill( "killstreakExit" );
if ( isdefined( level.ac130.owner ) )
level thread removeac130player( level.ac130.owner, 0 );
}
setac130player( var_0 )
{
self endon( "ac130player_removed" );
if ( isdefined( level.ac130player ) )
return 0;
init_sounds();
var_0 setclientomnvar( "enableCustomAudioZone", 1 );
level.ac130player = var_0;
level.ac130.owner = var_0;
level.ac130.planemodel show();
level.ac130.planemodel thread playac130effects();
level.ac130.incomingmissile = 0;
level.ac130.planemodel playloopsound( "veh_ac130iw6_ext_dist" );
level.ac130.planemodel thread damagetracker();
thread handleincomingmissiles();
level.ac130.planemodel thermaldrawenable();
var_1 = spawnplane( var_0, "script_model", level.ac130.planemodel.origin, "compass_objpoint_c130_friendly", "compass_objpoint_c130_enemy" );
var_1 notsolid();
var_1 linkto( level.ac130, "tag_player", ( 0, 80, 32 ), ( 0, -90, 0 ) );
var_1 thread deleteonac130playerremoved();
thread maps\mp\_utility::teamplayercardsplash( "used_ac130", var_0 );
var_0 thread waitsetthermal( 1.0 );
var_0 thread maps\mp\_utility::reinitializethermal( level.ac130.planemodel );
if ( getdvarint( "camera_thirdPerson" ) )
var_0 maps\mp\_utility::setthirdpersondof( 0 );
var_0 maps\mp\_utility::_giveweapon( "ac130_105mm_mp" );
var_0 maps\mp\_utility::_giveweapon( "ac130_40mm_mp" );
var_0 maps\mp\_utility::_giveweapon( "ac130_25mm_mp" );
var_0 switchtoweapon( "ac130_105mm_mp" );
var_0 thread removeac130playeraftertime( level.ac130_use_duration * var_0.killstreakscaler );
var_0 setclientomnvar( "ui_ac130_hud", 1 );
var_0 thread overlay_coords();
var_0 setblurforplayer( 1.2, 0 );
var_0 thread attachplayer( var_0 );
var_0 thread changeweapons();
var_0 thread weaponfiredthread();
var_0 thread context_sensative_dialog();
var_0 thread shotfired();
var_0 thread clouds();
if ( isbot( self ) )
{
self.vehicle_controlling = level.ac130;
var_0 thread ac130_control_bot_aiming();
}
var_0 thread watchhostmigrationfinishedinit();
var_0 thread removeac130playerondisconnect();
var_0 thread removeac130playeronchangeteams();
var_0 thread removeac130playeronspectate();
var_0 thread removeac130playeroncrash();
var_0 thread removeac130playerongamecleanup();
var_0 thread monitormanualplayerexit();
thread ac130_altscene();
return 1;
}
initac130hud()
{
self setclientomnvar( "ui_ac130_hud", 1 );
common_scripts\utility::waitframe();
self switchtoweapon( "ac130_105mm_mp" );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_weapon", 0 );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_105mm_ammo", self getweaponammoclip( "ac130_105mm_mp" ) );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_40mm_ammo", self getweaponammoclip( "ac130_40mm_mp" ) );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_25mm_ammo", self getweaponammoclip( "ac130_25mm_mp" ) );
common_scripts\utility::waitframe();
thread overlay_coords();
self setclientomnvar( "enableCustomAudioZone", 1 );
}
watchhostmigrationfinishedinit()
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
level endon( "game_ended" );
self endon( "death" );
for (;;)
{
level waittill( "host_migration_end" );
initac130hud();
}
}
waitsetthermal( var_0 )
{
self endon( "disconnect" );
level endon( "ac130player_removed" );
wait( var_0 );
self visionsetthermalforplayer( game["thermal_vision"], 0 );
self thermalvisionfofoverlayon();
thread thermalvision();
}
playac130effects()
{
wait 0.05;
playfxontag( level._effect["ac130_light_red_blink"], self, "tag_light_belly" );
playfxontag( level._effect["ac130_engineeffect"], self, "tag_body" );
wait 0.5;
playfxontag( level._effect["ac130_light_white_blink"], self, "tag_light_tail" );
playfxontag( level._effect["ac130_light_red"], self, "tag_light_top" );
wait 0.5;
playfxontag( level.fx_airstrike_contrail, self, "tag_light_L_wing" );
playfxontag( level.fx_airstrike_contrail, self, "tag_light_R_wing" );
}
ac130_altscene()
{
foreach ( var_1 in level.players )
{
if ( var_1 != level.ac130player && var_1.team == level.ac130player.team )
var_1 thread maps\mp\_utility::setaltsceneobj( level.ac130.cameramodel, "tag_origin", 20 );
}
}
removeac130playerongameend()
{
self endon( "ac130player_removed" );
level waittill( "game_ended" );
level thread removeac130player( self, 0 );
}
removeac130playerongamecleanup()
{
self endon( "ac130player_removed" );
level waittill( "game_cleanup" );
level thread removeac130player( self, 0 );
}
removeac130playerondeath()
{
self endon( "ac130player_removed" );
self waittill( "death" );
level thread removeac130player( self, 0 );
}
removeac130playeroncrash()
{
self endon( "ac130player_removed" );
level.ac130.planemodel waittill( "crashing" );
level thread removeac130player( self, 0 );
}
removeac130playerondisconnect()
{
self endon( "ac130player_removed" );
self waittill( "disconnect" );
level thread removeac130player( self, 1 );
}
removeac130playeronchangeteams()
{
self endon( "ac130player_removed" );
self waittill( "joined_team" );
level thread removeac130player( self, 0 );
}
removeac130playeronspectate()
{
self endon( "ac130player_removed" );
common_scripts\utility::waittill_any( "joined_spectators", "spawned" );
level thread removeac130player( self, 0 );
}
removeac130playeraftertime( var_0 )
{
self endon( "ac130player_removed" );
var_1 = var_0;
self setclientomnvar( "ui_ac130_use_time", var_1 * 1000 + gettime() );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_1 );
self setclientomnvar( "ui_ac130_use_time", 0 );
level thread removeac130player( self, 0 );
}
removeac130player( var_0, var_1 )
{
var_0 notify( "ac130player_removed" );
level notify( "ac130player_removed" );
level.ac130.cameramodel notify( "death" );
waittillframeend;
if ( !var_1 )
{
var_0 maps\mp\_utility::clearusingremote();
var_0 stoplocalsound( "missile_incoming" );
var_0 stoploopsound();
var_0 show();
var_0 unlink();
if ( isbot( var_0 ) )
{
var_0 controlsunlink();
var_0 cameraunlink();
var_0.vehicle_controlling = undefined;
}
var_0 thermalvisionoff();
var_0 thermalvisionfofoverlayoff();
var_0 visionsetthermalforplayer( level.ac130.thermal_vision, 0 );
var_0.lastvisionsetthermal = level.ac130.thermal_vision;
var_0 setblurforplayer( 0, 0 );
if ( getdvarint( "camera_thirdPerson" ) )
var_0 maps\mp\_utility::setthirdpersondof( 1 );
var_2 = maps\mp\_utility::getkillstreakweapon( "ac130" );
var_0 takeweapon( var_2 );
var_0 takeweapon( "ac130_105mm_mp" );
var_0 takeweapon( "ac130_40mm_mp" );
var_0 takeweapon( "ac130_25mm_mp" );
var_0 setclientomnvar( "ui_ac130_hud", 0 );
var_0 setclientomnvar( "enableCustomAudioZone", 0 );
}
removefromlittlebirdlist();
wait 0.5;
level.ac130.planemodel playsound( "veh_ac130iw6_ext_dist_fade" );
wait 0.5;
level.ac130player = undefined;
level.ac130.planemodel hide();
level.ac130.planemodel stoploopsound();
if ( isdefined( level.ac130.planemodel.crashed ) )
{
level.ac130inuse = 0;
return;
}
var_3 = spawn( "script_model", level.ac130.planemodel gettagorigin( "tag_origin" ) );
var_3.angles = level.ac130.planemodel.angles;
var_3 setmodel( "vehicle_y_8_gunship_mp" );
var_4 = var_3.origin + anglestoright( var_3.angles ) * 20000;
var_4 = var_4 + ( 0, 0, 10000 );
var_3 thread playac130effects();
var_3 moveto( var_4, 40.0, 0.0, 0.0 );
var_5 = ( 0, var_3.angles[1], -20 );
var_3 rotateto( var_5, 30, 1, 1 );
var_3 thread deployflares( 1 );
wait 5.0;
var_3 thread deployflares( 1 );
wait 5.0;
var_3 thread deployflares( 1 );
level.ac130inuse = 0;
wait 30.0;
var_3 delete();
}
removefromlittlebirdlist()
{
var_0 = level.ac130.planemodel getentitynumber();
level.littlebirds[var_0] = undefined;
}
damagetracker()
{
self endon( "death" );
self endon( "crashing" );
level endon( "game_ended" );
level endon( "ac130player_removed" );
self.health = 999999;
self.maxhealth = 1000;
self.damagetaken = 0;
self.team = level.ac130player.team;
maps\mp\killstreaks\_helicopter::addtolittlebirdlist();
self.attractor = missile_createattractorent( self, 1000, 4096 );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( isdefined( level.ac130player ) && level.teambased && isplayer( var_1 ) && var_1.team == level.ac130player.team && !isdefined( level.nukedetonated ) )
continue;
if ( var_4 == "MOD_RIFLE_BULLET" || var_4 == "MOD_PISTOL_BULLET" || var_4 == "MOD_EXPLOSIVE_BULLET" )
continue;
self.wasdamaged = 1;
var_10 = var_0;
if ( isplayer( var_1 ) )
var_1 maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "ac130" );
maps\mp\killstreaks\_killstreaks::killstreakhit( var_1, var_9, level.ac130 );
if ( isdefined( var_1.owner ) && isplayer( var_1.owner ) )
var_1.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "ac130" );
self.damagetaken = self.damagetaken + var_10;
if ( self.damagetaken >= self.maxhealth )
{
if ( isplayer( var_1 ) )
{
thread maps\mp\gametypes\_missions::vehiclekilled( level.ac130player, self, undefined, var_1, var_0, var_4, var_9 );
thread maps\mp\_utility::teamplayercardsplash( "callout_destroyed_ac130", var_1 );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "kill", 400, var_9, var_4 );
var_1 notify( "destroyed_killstreak" );
}
level thread crashplane( 10.0 );
}
}
}
ac130_spawn()
{
wait 0.05;
var_0 = spawn( "script_model", level.ac130 gettagorigin( "tag_player" ) );
var_0 setmodel( "vehicle_y_8_gunship_mp" );
var_0.targetname = "vehicle_y_8_gunship_mp";
var_0 setcandamage( 1 );
var_0.maxhealth = 1000;
var_0.health = var_0.maxhealth;
var_0 linkto( level.ac130, "tag_player", ( 0, 80, 32 ), ( -25, 0, 0 ) );
level.ac130.planemodel = var_0;
level.ac130.planemodel hide();
var_1 = spawn( "script_model", level.ac130 gettagorigin( "tag_player" ) );
var_1 setmodel( "tag_origin" );
var_1 hide();
var_1.targetname = "ac130CameraModel";
var_1 linkto( level.ac130, "tag_player", ( 0, 0, 32 ), ( 5, 0, 0 ) );
level.ac130.cameramodel = var_1;
}
overlay_coords()
{
self endon( "ac130player_removed" );
wait 0.05;
thread updateplanemodelcoords();
thread updateaimingcoords();
}
updateplanemodelcoords()
{
self endon( "ac130player_removed" );
for (;;)
{
self setclientomnvar( "ui_ac130_coord1_posx", abs( level.ac130.planemodel.origin[0] ) );
self setclientomnvar( "ui_ac130_coord1_posy", abs( level.ac130.planemodel.origin[1] ) );
self setclientomnvar( "ui_ac130_coord1_posz", abs( level.ac130.planemodel.origin[2] ) );
wait 0.5;
}
}
updateplayerpositioncoords()
{
self endon( "ac130player_removed" );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_coord2_posx", abs( self.origin[0] ) );
self setclientomnvar( "ui_ac130_coord2_posy", abs( self.origin[1] ) );
self setclientomnvar( "ui_ac130_coord2_posz", abs( self.origin[2] ) );
}
updateaimingcoords()
{
self endon( "ac130player_removed" );
for (;;)
{
var_0 = self geteye();
var_1 = self getplayerangles();
var_2 = anglestoforward( var_1 );
var_3 = var_0 + var_2 * 15000;
var_4 = physicstrace( var_0, var_3 );
self setclientomnvar( "ui_ac130_coord3_posx", abs( var_4[0] ) );
self setclientomnvar( "ui_ac130_coord3_posy", abs( var_4[1] ) );
self setclientomnvar( "ui_ac130_coord3_posz", abs( var_4[2] ) );
wait 0.1;
}
}
ac130shellshock()
{
self endon( "ac130player_removed" );
level endon( "post_effects_disabled" );
var_0 = 5;
for (;;)
{
self shellshock( "ac130", var_0 );
wait( var_0 );
}
}
rotateplane( var_0 )
{
level notify( "stop_rotatePlane_thread" );
level endon( "stop_rotatePlane_thread" );
if ( var_0 == "on" )
{
var_1 = 10;
var_2 = level.ac130_speed["rotate"] / 360 * var_1;
level.ac130 rotateyaw( level.ac130.angles[2] + var_1, var_2, var_2, 0 );
for (;;)
{
level.ac130 rotateyaw( 360, level.ac130_speed["rotate"] );
wait( level.ac130_speed["rotate"] );
}
}
else if ( var_0 == "off" )
{
var_3 = 10;
var_2 = level.ac130_speed["rotate"] / 360 * var_3;
level.ac130 rotateyaw( level.ac130.angles[2] + var_3, var_2, 0, var_2 );
}
}
attachplayer( var_0 )
{
if ( isbot( var_0 ) )
var_0 cameralinkto( level.ac130, "tag_player" );
self playerlinkweaponviewtodelta( level.ac130.cameramodel, "tag_player", 1.0, 35, 35, 35, 35 );
self setplayerangles( level.ac130 gettagangles( "tag_player" ) );
}
changeweapons()
{
self endon( "ac130player_removed" );
wait 0.05;
self enableweapons();
self enableweaponswitch();
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_105mm_ammo", self getweaponammoclip( "ac130_105mm_mp" ) );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_40mm_ammo", self getweaponammoclip( "ac130_40mm_mp" ) );
common_scripts\utility::waitframe();
self setclientomnvar( "ui_ac130_25mm_ammo", self getweaponammoclip( "ac130_25mm_mp" ) );
for (;;)
{
self waittill( "weapon_change", var_0 );
thread play_sound_on_entity( "ac130iw6_weapon_switch" );
self notify( "reset_25mm" );
self stoploopsound( "ac130iw6_25mm_fire_loop" );
switch ( var_0 )
{
case "ac130_105mm_mp":
self setclientomnvar( "ui_ac130_weapon", 0 );
break;
case "ac130_40mm_mp":
self setclientomnvar( "ui_ac130_weapon", 1 );
break;
case "ac130_25mm_mp":
self setclientomnvar( "ui_ac130_weapon", 2 );
thread playsound25mm();
break;
}
}
}
weaponfiredthread()
{
self endon( "ac130player_removed" );
for (;;)
{
self waittill( "weapon_fired" );
var_0 = self getcurrentweapon();
switch ( var_0 )
{
case "ac130_105mm_mp":
thread gun_fired_and_ready_105mm();
earthquake( 0.2, 1, level.ac130.planemodel.origin, 1000 );
self setclientomnvar( "ui_ac130_105mm_ammo", self getweaponammoclip( var_0 ) );
break;
case "ac130_40mm_mp":
earthquake( 0.1, 0.5, level.ac130.planemodel.origin, 1000 );
self setclientomnvar( "ui_ac130_40mm_ammo", self getweaponammoclip( var_0 ) );
break;
case "ac130_25mm_mp":
self setclientomnvar( "ui_ac130_25mm_ammo", self getweaponammoclip( var_0 ) );
break;
}
if ( self getweaponammoclip( var_0 ) )
continue;
thread weaponreload( var_0 );
}
}
weaponreload( var_0 )
{
self endon( "ac130player_removed" );
wait( level.weaponreloadtime[var_0] );
self setweaponammoclip( var_0, 9999 );
switch ( var_0 )
{
case "ac130_105mm_mp":
self setclientomnvar( "ui_ac130_105mm_ammo", self getweaponammoclip( var_0 ) );
break;
case "ac130_40mm_mp":
self setclientomnvar( "ui_ac130_40mm_ammo", self getweaponammoclip( var_0 ) );
break;
case "ac130_25mm_mp":
self setclientomnvar( "ui_ac130_25mm_ammo", self getweaponammoclip( var_0 ) );
break;
}
if ( self getcurrentweapon() == var_0 )
{
self takeweapon( var_0 );
maps\mp\_utility::_giveweapon( var_0 );
self switchtoweapon( var_0 );
}
}
playsound25mm()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
self endon( "ac130player_removed" );
self endon( "reset_25mm" );
var_0 = self getcurrentweapon();
for (;;)
{
self waittill( "weapon_fired" );
self stoplocalsound( "ac130iw6_25mm_fire_loop_cooldown" );
self playloopsound( "ac130iw6_25mm_fire_loop" );
while ( self attackbuttonpressed() && self getweaponammoclip( var_0 ) )
wait 0.05;
self stoploopsound();
self playlocalsound( "ac130iw6_25mm_fire_loop_cooldown" );
}
}
ac130_control_bot_aiming()
{
self endon( "ac130player_removed" );
var_0 = undefined;
var_1 = undefined;
var_2 = undefined;
var_3 = 0;
var_4 = 0;
var_5 = undefined;
var_6 = ( self botgetdifficultysetting( "minInaccuracy" ) + self botgetdifficultysetting( "maxInaccuracy" ) ) / 2;
var_7 = 0;
for (;;)
{
var_8 = 0;
var_9 = 0;
if ( isdefined( var_1 ) && var_1.health <= 0 && gettime() - var_1.deathtime < 2000 )
{
var_8 = 1;
var_9 = 1;
}
else if ( isalive( self.enemy ) && ( self botcanseeentity( self.enemy ) || gettime() - self lastknowntime( self.enemy ) <= 300 ) )
{
var_8 = 1;
var_1 = self.enemy;
var_10 = var_1.origin;
var_0 = self.enemy.origin;
if ( self botcanseeentity( self.enemy ) )
{
var_7 = 0;
var_9 = 1;
var_11 = gettime();
}
else
{
var_7 = var_7 + 0.05;
if ( var_7 > 5.0 )
var_8 = 0;
}
}
if ( var_8 )
{
if ( isdefined( var_0 ) )
var_2 = var_0;
if ( var_9 && ( maps\mp\bots\_bots_ks_remote_vehicle::bot_body_is_dead() || distancesquared( var_2, level.ac130.origin ) > level.physicssphereradius["ac130_105mm_mp"] * level.physicssphereradius["ac130_105mm_mp"] ) )
self botpressbutton( "attack" );
if ( gettime() > var_4 + 500 )
{
var_12 = randomfloatrange( -1 * var_6 / 2, var_6 / 2 );
var_13 = randomfloatrange( -1 * var_6 / 2, var_6 / 2 );
var_14 = randomfloatrange( -1 * var_6 / 2, var_6 / 2 );
var_5 = ( 150 * var_12, 150 * var_13, 150 * var_14 );
var_4 = gettime();
}
var_2 = var_2 + var_5;
}
else if ( gettime() > var_3 )
{
var_3 = gettime() + randomintrange( 1000, 2000 );
var_2 = maps\mp\bots\_bots_ks_remote_vehicle::get_random_outside_target();
}
self botlookatpoint( var_2, 0.2, "script_forced" );
wait 0.05;
}
}
thermalvision()
{
self endon( "ac130player_removed" );
self thermalvisionon();
self visionsetthermalforplayer( level.ac130.enhanced_vision, 1 );
self.lastvisionsetthermal = level.ac130.enhanced_vision;
self visionsetthermalforplayer( level.ac130.thermal_vision, 0.62 );
self.lastvisionsetthermal = level.ac130.thermal_vision;
self setclientdvar( "ui_ac130_thermal", 1 );
}
clouds()
{
self endon( "ac130player_removed" );
wait 6;
clouds_create();
for (;;)
{
wait( randomfloatrange( 40, 80 ) );
clouds_create();
}
}
clouds_create()
{
if ( isdefined( level.playerweapon ) && issubstr( tolower( level.playerweapon ), "25" ) )
return;
playfxontagforclients( level._effect["cloud"], level.ac130, "tag_player", level.ac130player );
}
gun_fired_and_ready_105mm()
{
self endon( "ac130player_removed" );
level notify( "gun_fired_and_ready_105mm" );
level endon( "gun_fired_and_ready_105mm" );
wait 0.5;
if ( randomint( 2 ) == 0 )
thread context_sensative_dialog_play_random_group_sound( "weapons", "105mm_fired" );
wait 5.0;
thread context_sensative_dialog_play_random_group_sound( "weapons", "105mm_ready" );
}
shotfired()
{
self endon( "ac130player_removed" );
for (;;)
{
self waittill( "projectile_impact", var_0, var_1, var_2 );
if ( issubstr( tolower( var_0 ), "105" ) )
{
earthquake( 0.4, 1.0, var_1, 3500 );
self setclientomnvar( "ui_ac130_darken", 1 );
}
else if ( issubstr( tolower( var_0 ), "40" ) )
earthquake( 0.2, 0.5, var_1, 2000 );
if ( maps\mp\_utility::getintproperty( "ac130_ragdoll_deaths", 0 ) )
thread shotfiredphysicssphere( var_1, var_0 );
wait 0.05;
}
}
shotfiredphysicssphere( var_0, var_1 )
{
wait 0.1;
physicsexplosionsphere( var_0, level.physicssphereradius[var_1], level.physicssphereradius[var_1] / 2, level.physicssphereforce[var_1] );
}
add_beacon_effect()
{
self endon( "death" );
var_0 = 0.75;
wait( randomfloat( 3.0 ) );
for (;;)
{
if ( level.ac130player )
playfxontagforclients( level._effect["beacon"], self, "j_spine4", level.ac130player );
wait( var_0 );
}
}
context_sensative_dialog()
{
thread enemy_killed_thread();
thread context_sensative_dialog_guy_in_sight();
thread context_sensative_dialog_guy_crawling();
thread context_sensative_dialog_guy_pain();
thread context_sensative_dialog_secondary_explosion_vehicle();
thread context_sensative_dialog_kill_thread();
thread context_sensative_dialog_locations();
thread context_sensative_dialog_filler();
}
context_sensative_dialog_guy_in_sight()
{
self endon( "ac130player_removed" );
for (;;)
{
if ( context_sensative_dialog_guy_in_sight_check() )
thread context_sensative_dialog_play_random_group_sound( "ai", "in_sight" );
wait( randomfloatrange( 1, 3 ) );
}
}
context_sensative_dialog_guy_in_sight_check()
{
var_0 = [];
foreach ( var_2 in level.players )
{
if ( !maps\mp\_utility::isreallyalive( var_2 ) )
continue;
if ( var_2.team == level.ac130player.team )
continue;
if ( var_2.team == "spectator" )
continue;
var_0[var_0.size] = var_2;
}
for ( var_4 = 0; var_4 < var_0.size; var_4++ )
{
if ( !isdefined( var_0[var_4] ) )
continue;
if ( !isalive( var_0[var_4] ) )
continue;
if ( common_scripts\utility::within_fov( level.ac130player geteye(), level.ac130player getplayerangles(), var_0[var_4].origin, level.cosine["5"] ) )
return 1;
wait 0.05;
}
return 0;
}
context_sensative_dialog_guy_crawling()
{
self endon( "ac130player_removed" );
for (;;)
{
level waittill( "ai_crawling", var_0 );
thread context_sensative_dialog_play_random_group_sound( "ai", "wounded_crawl" );
}
}
context_sensative_dialog_guy_pain()
{
self endon( "ac130player_removed" );
for (;;)
{
level waittill( "ai_pain", var_0 );
thread context_sensative_dialog_play_random_group_sound( "ai", "wounded_pain" );
}
}
context_sensative_dialog_secondary_explosion_vehicle()
{
self endon( "ac130player_removed" );
for (;;)
{
level waittill( "player_destroyed_car", var_0, var_1 );
wait 1;
thread context_sensative_dialog_play_random_group_sound( "explosion", "secondary" );
}
}
enemy_killed_thread()
{
self endon( "ac130player_removed" );
for (;;)
{
level waittill( "ai_killed", var_0 );
thread context_sensative_dialog_kill( var_0, level.ac130player );
}
}
context_sensative_dialog_kill( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
return;
if ( !isplayer( var_1 ) )
return;
level.enemieskilledintimewindow++;
level notify( "enemy_killed" );
}
context_sensative_dialog_kill_thread()
{
self endon( "ac130player_removed" );
var_0 = 1;
for (;;)
{
level waittill( "enemy_killed" );
wait( var_0 );
var_1 = "kill";
var_2 = undefined;
if ( level.enemieskilledintimewindow >= 2 )
var_2 = "small_group";
else
{
var_2 = "single";
if ( randomint( 3 ) != 1 )
{
level.enemieskilledintimewindow = 0;
continue;
}
}
level.enemieskilledintimewindow = 0;
thread context_sensative_dialog_play_random_group_sound( var_1, var_2, 1 );
}
}
context_sensative_dialog_locations()
{
common_scripts\utility::array_thread( getentarray( "context_dialog_car", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "car" );
common_scripts\utility::array_thread( getentarray( "context_dialog_truck", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "truck" );
common_scripts\utility::array_thread( getentarray( "context_dialog_building", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "building" );
common_scripts\utility::array_thread( getentarray( "context_dialog_wall", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "wall" );
common_scripts\utility::array_thread( getentarray( "context_dialog_field", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "field" );
common_scripts\utility::array_thread( getentarray( "context_dialog_road", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "road" );
common_scripts\utility::array_thread( getentarray( "context_dialog_church", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "church" );
common_scripts\utility::array_thread( getentarray( "context_dialog_ditch", "targetname" ), ::context_sensative_dialog_locations_add_notify_event, "ditch" );
thread context_sensative_dialog_locations_thread();
}
context_sensative_dialog_locations_thread()
{
self endon( "ac130player_removed" );
for (;;)
{
level waittill( "context_location", var_0 );
if ( !isdefined( var_0 ) )
continue;
if ( !common_scripts\utility::flag( "allow_context_sensative_dialog" ) )
continue;
thread context_sensative_dialog_play_random_group_sound( "location", var_0 );
wait( 5 + randomfloat( 10 ) );
}
}
context_sensative_dialog_locations_add_notify_event( var_0 )
{
self endon( "ac130player_removed" );
for (;;)
{
self waittill( "trigger", var_1 );
if ( !isdefined( var_1 ) )
continue;
if ( !isdefined( var_1.team ) || var_1.team != "axis" )
continue;
level notify( "context_location", var_0 );
wait 5;
}
}
context_sensative_dialog_vehiclespawn( var_0 )
{
if ( var_0.script_team != "axis" )
return;
thread context_sensative_dialog_vehicledeath( var_0 );
var_0 endon( "death" );
while ( !common_scripts\utility::within_fov( level.ac130player geteye(), level.ac130player getplayerangles(), var_0.origin, level.cosine["45"] ) )
wait 0.5;
context_sensative_dialog_play_random_group_sound( "vehicle", "incoming" );
}
context_sensative_dialog_vehicledeath( var_0 )
{
var_0 waittill( "death" );
thread context_sensative_dialog_play_random_group_sound( "vehicle", "death" );
}
context_sensative_dialog_filler()
{
self endon( "ac130player_removed" );
for (;;)
{
if ( isdefined( level.radio_in_use ) && level.radio_in_use == 1 )
level waittill( "radio_not_in_use" );
var_0 = gettime();
if ( var_0 - level.lastradiotransmission >= 3000 )
{
level.lastradiotransmission = var_0;
thread context_sensative_dialog_play_random_group_sound( "misc", "action" );
}
wait 0.25;
}
}
context_sensative_dialog_play_random_group_sound( var_0, var_1, var_2 )
{
level endon( "ac130player_removed" );
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !common_scripts\utility::flag( "allow_context_sensative_dialog" ) )
{
if ( var_2 )
common_scripts\utility::flag_wait( "allow_context_sensative_dialog" );
else
return;
}
var_3 = undefined;
var_4 = randomint( level.scr_sound[var_0][var_1].size );
if ( level.scr_sound[var_0][var_1][var_4].played == 1 )
{
for ( var_5 = 0; var_5 < level.scr_sound[var_0][var_1].size; var_5++ )
{
var_4++;
if ( var_4 >= level.scr_sound[var_0][var_1].size )
var_4 = 0;
if ( level.scr_sound[var_0][var_1][var_4].played == 1 )
continue;
var_3 = var_4;
break;
}
if ( !isdefined( var_3 ) )
{
for ( var_5 = 0; var_5 < level.scr_sound[var_0][var_1].size; var_5++ )
level.scr_sound[var_0][var_1][var_5].played = 0;
var_3 = randomint( level.scr_sound[var_0][var_1].size );
}
}
else
var_3 = var_4;
if ( context_sensative_dialog_timedout( var_0, var_1, var_3 ) )
return;
level.scr_sound[var_0][var_1][var_3].played = 1;
var_6 = randomint( level.scr_sound[var_0][var_1][var_3].size );
playsoundoverradio( level.scr_sound[var_0][var_1][var_3].sounds[var_6], var_2 );
}
context_sensative_dialog_timedout( var_0, var_1, var_2 )
{
if ( !isdefined( level.context_sensative_dialog_timeouts ) )
return 0;
if ( !isdefined( level.context_sensative_dialog_timeouts[var_0] ) )
return 0;
if ( !isdefined( level.context_sensative_dialog_timeouts[var_0][var_1] ) )
return 0;
if ( isdefined( level.context_sensative_dialog_timeouts[var_0][var_1].groups ) && isdefined( level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )] ) )
{
var_3 = gettime();
if ( var_3 - level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )].v["lastPlayed"] < level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )].v["timeoutDuration"] )
return 1;
level.context_sensative_dialog_timeouts[var_0][var_1].groups[string( var_2 )].v["lastPlayed"] = var_3;
}
else if ( isdefined( level.context_sensative_dialog_timeouts[var_0][var_1].v ) )
{
var_3 = gettime();
if ( var_3 - level.context_sensative_dialog_timeouts[var_0][var_1].v["lastPlayed"] < level.context_sensative_dialog_timeouts[var_0][var_1].v["timeoutDuration"] )
return 1;
level.context_sensative_dialog_timeouts[var_0][var_1].v["lastPlayed"] = var_3;
}
return 0;
}
playsoundoverradio( var_0, var_1, var_2 )
{
if ( !isdefined( level.radio_in_use ) )
level.radio_in_use = 0;
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( !isdefined( var_2 ) )
var_2 = 0;
var_2 = var_2 * 1000;
var_3 = gettime();
var_4 = 0;
var_4 = playaliasoverradio( var_0 );
if ( var_4 )
return;
if ( !var_1 )
return;
level.radioforcedtransmissionqueue[level.radioforcedtransmissionqueue.size] = var_0;
while ( !var_4 )
{
if ( level.radio_in_use )
level waittill( "radio_not_in_use" );
if ( var_2 > 0 && gettime() - var_3 > var_2 )
break;
if ( !isdefined( level.ac130player ) )
break;
var_4 = playaliasoverradio( level.radioforcedtransmissionqueue[0] );
if ( !level.radio_in_use && isdefined( level.ac130player ) && !var_4 )
{
}
}
level.radioforcedtransmissionqueue = array_remove_index( level.radioforcedtransmissionqueue, 0 );
}
playaliasoverradio( var_0 )
{
if ( level.radio_in_use )
return 0;
if ( !isdefined( level.ac130player ) )
return 0;
level.radio_in_use = 1;
if ( self.team == "allies" || self.team == "axis" )
{
var_0 = maps\mp\gametypes\_teams::getteamvoiceprefix( self.team ) + var_0;
level.ac130player playlocalsound( var_0 );
}
wait 4.0;
level.radio_in_use = 0;
level.lastradiotransmission = gettime();
level notify( "radio_not_in_use" );
return 1;
}
debug_circle( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = 16;
var_7 = 360 / var_6;
var_8 = [];
for ( var_9 = 0; var_9 < var_6; var_9++ )
{
var_10 = var_7 * var_9;
var_11 = cos( var_10 ) * var_1;
var_12 = sin( var_10 ) * var_1;
var_13 = var_0[0] + var_11;
var_14 = var_0[1] + var_12;
var_15 = var_0[2];
var_8[var_8.size] = ( var_13, var_14, var_15 );
}
if ( isdefined( var_4 ) )
wait( var_4 );
thread debug_circle_drawlines( var_8, var_2, var_3, var_5, var_0 );
}
debug_circle_drawlines( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_3 ) )
var_3 = 0;
if ( !isdefined( var_4 ) )
var_3 = 0;
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
{
var_6 = var_0[var_5];
if ( var_5 + 1 >= var_0.size )
var_7 = var_0[0];
else
var_7 = var_0[var_5 + 1];
thread debug_line( var_6, var_7, var_1, var_2 );
if ( var_3 )
thread debug_line( var_4, var_6, var_1, var_2 );
}
}
debug_line( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_3 ) )
var_3 = ( 1, 1, 1 );
for ( var_4 = 0; var_4 < var_2 * 20; var_4++ )
wait 0.05;
}
handleincomingmissiles()
{
level endon( "game_ended" );
level.ac130.planemodel thread flares_monitor( 1 );
}
flares_monitor( var_0 )
{
self.flaresreservecount = var_0;
self.flareslive = [];
thread ks_laserguidedmissile_handleincoming();
thread ks_airsuperiority_handleincoming();
}
playflarefx( var_0 )
{
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
thread angel_flare();
wait( randomfloatrange( 0.1, 0.25 ) );
}
}
deployflares( var_0 )
{
self playsound( "ac130iw6_flare_burst" );
if ( !isdefined( var_0 ) )
{
var_1 = spawn( "script_origin", level.ac130.planemodel.origin );
var_1.angles = level.ac130.planemodel.angles;
var_1 movegravity( ( 0, 0, 0 ), 5.0 );
thread playflarefx( 10 );
self.flareslive[self.flareslive.size] = var_1;
var_1 thread deleteaftertime( 5.0 );
return var_1;
}
else
thread playflarefx( 5 );
}
flares_getnumleft( var_0 )
{
return var_0.flaresreservecount;
}
flares_areavailable( var_0 )
{
flares_cleanflareslivearray( var_0 );
return var_0.flaresreservecount > 0 || var_0.flareslive.size > 0;
}
flares_getflarereserve( var_0 )
{
var_0.flaresreservecount--;
var_1 = var_0 deployflares();
return var_1;
}
flares_cleanflareslivearray( var_0 )
{
var_0.flareslive = common_scripts\utility::array_removeundefined( var_0.flareslive );
}
flares_getflarelive( var_0 )
{
flares_cleanflareslivearray( var_0 );
var_1 = undefined;
if ( var_0.flareslive.size > 0 )
var_1 = var_0.flareslive[var_0.flareslive.size - 1];
return var_1;
}
ks_laserguidedmissile_handleincoming()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "crashing" );
self endon( "leaving" );
self endon( "helicopter_done" );
while ( flares_areavailable( self ) )
{
level waittill( "laserGuidedMissiles_incoming", var_0, var_1, var_2 );
if ( !isdefined( var_2 ) || var_2 != self )
continue;
level.ac130player playlocalsound( "missile_incoming" );
level.ac130player thread ks_watch_death_stop_sound( self, "missile_incoming" );
foreach ( var_4 in var_1 )
{
if ( isvalidmissile( var_4 ) )
level thread ks_laserguidedmissile_monitorproximity( var_4, var_0, var_0.team, var_2 );
}
}
}
ks_laserguidedmissile_monitorproximity( var_0, var_1, var_2, var_3 )
{
var_3 endon( "death" );
var_0 endon( "death" );
var_0 endon( "missile_targetChanged" );
while ( flares_areavailable( var_3 ) )
{
if ( !isdefined( var_3 ) || !isvalidmissile( var_0 ) )
break;
var_4 = var_3 getpointinbounds( 0, 0, 0 );
if ( distancesquared( var_0.origin, var_4 ) < 4000000 )
{
var_5 = flares_getflarelive( var_3 );
if ( !isdefined( var_5 ) )
var_5 = flares_getflarereserve( var_3 );
var_0 missile_settargetent( var_5 );
var_0 notify( "missile_pairedWithFlare" );
level.ac130player stoplocalsound( "missile_incoming" );
break;
}
common_scripts\utility::waitframe();
}
}
ks_airsuperiority_handleincoming()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "crashing" );
self endon( "leaving" );
self endon( "helicopter_done" );
while ( flares_areavailable( self ) )
{
self waittill( "targeted_by_incoming_missile", var_0 );
if ( !isdefined( var_0 ) )
continue;
level.ac130player playlocalsound( "missile_incoming" );
level.ac130player thread ks_watch_death_stop_sound( self, "missile_incoming" );
foreach ( var_2 in var_0 )
{
if ( isvalidmissile( var_2 ) )
thread ks_airsuperiority_monitorproximity( var_2 );
}
}
}
ks_airsuperiority_monitorproximity( var_0 )
{
self endon( "death" );
var_0 endon( "death" );
for (;;)
{
if ( !isdefined( self ) || !isvalidmissile( var_0 ) )
break;
var_1 = self getpointinbounds( 0, 0, 0 );
if ( distancesquared( var_0.origin, var_1 ) < 4000000 )
{
var_2 = flares_getflarelive( self );
if ( !isdefined( var_2 ) && self.flaresreservecount > 0 )
var_2 = flares_getflarereserve( self );
if ( isdefined( var_2 ) )
{
var_0 missile_settargetent( var_2 );
var_0 notify( "missile_pairedWithFlare" );
level.ac130player stoplocalsound( "missile_incoming" );
break;
}
}
common_scripts\utility::waitframe();
}
}
ks_watch_death_stop_sound( var_0, var_1 )
{
self endon( "disconnect" );
var_0 waittill( "death" );
self stoplocalsound( var_1 );
}
deleteaftertime( var_0 )
{
wait( var_0 );
self delete();
}
crashplane( var_0 )
{
level.ac130.planemodel notify( "crashing" );
level.ac130.planemodel.crashed = 1;
playfxontag( level._effect["ac130_explode"], level.ac130.planemodel, "tag_deathfx" );
wait 0.25;
level.ac130.planemodel hide();
}
angelflareprecache()
{
level._effect["angel_flare_geotrail"] = loadfx( "fx/smoke/angel_flare_geotrail" );
level._effect["angel_flare_swirl"] = loadfx( "fx/smoke/angel_flare_swirl_runner" );
}
angel_flare()
{
var_0 = spawn( "script_model", self.origin );
var_0 setmodel( "angel_flare_rig" );
var_0.origin = self gettagorigin( "tag_flash_flares" );
var_0.angles = self gettagangles( "tag_flash_flares" );
var_0.angles = ( var_0.angles[0], var_0.angles[1] + 180, var_0.angles[2] + -90 );
var_1 = level._effect["angel_flare_geotrail"];
var_0 scriptmodelplayanim( "ac130_angel_flares0" + ( randomint( 3 ) + 1 ) );
wait 0.1;
playfxontag( var_1, var_0, "flare_left_top" );
playfxontag( var_1, var_0, "flare_right_top" );
wait 0.05;
playfxontag( var_1, var_0, "flare_left_bot" );
playfxontag( var_1, var_0, "flare_right_bot" );
wait 3.0;
stopfxontag( var_1, var_0, "flare_left_top" );
stopfxontag( var_1, var_0, "flare_right_top" );
stopfxontag( var_1, var_0, "flare_left_bot" );
stopfxontag( var_1, var_0, "flare_right_bot" );
var_0 delete();
}