// 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(); }