370 lines
9.1 KiB
Plaintext
370 lines
9.1 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
flares_monitor( var_0 )
|
|
{
|
|
self.flaresreservecount = var_0;
|
|
self.flareslive = [];
|
|
thread ks_laserguidedmissile_handleincoming();
|
|
}
|
|
|
|
flares_playfx()
|
|
{
|
|
for ( var_0 = 0; var_0 < 10; var_0++ )
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
playfxontag( level._effect["vehicle_flares"], self, "TAG_FLARE" );
|
|
wait 0.15;
|
|
}
|
|
}
|
|
|
|
flares_deploy()
|
|
{
|
|
var_0 = spawn( "script_origin", self.origin + ( 0, 0, -256 ) );
|
|
var_0.angles = self.angles;
|
|
var_0 movegravity( ( 0, 0, -1 ), 5.0 );
|
|
self.flareslive[self.flareslive.size] = var_0;
|
|
var_0 thread flares_deleteaftertime( 5.0, 2.0, self );
|
|
playsoundatpos( var_0.origin, "veh_helo_flares_npc" );
|
|
return var_0;
|
|
}
|
|
|
|
flares_deleteaftertime( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( var_1 ) && isdefined( var_2 ) )
|
|
{
|
|
var_0 = var_0 - var_1;
|
|
wait( var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_2.flareslive = common_scripts\utility::array_remove( var_2.flareslive, self );
|
|
}
|
|
|
|
wait( var_0 );
|
|
self delete();
|
|
}
|
|
|
|
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_0 thread flares_playfx();
|
|
var_1 = var_0 flares_deploy();
|
|
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;
|
|
|
|
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" );
|
|
break;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
flares_handleincomingsam( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "crashing" );
|
|
self endon( "leaving" );
|
|
self endon( "helicopter_done" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "sam_fired", var_1, var_2, var_3 );
|
|
|
|
if ( !isdefined( var_3 ) || var_3 != self )
|
|
continue;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
level thread [[ var_0 ]]( var_1, var_1.team, var_3, var_2 );
|
|
continue;
|
|
}
|
|
|
|
level thread flares_watchsamproximity( var_1, var_1.team, var_3, var_2 );
|
|
}
|
|
}
|
|
|
|
flares_watchsamproximity( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_2 endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = var_2 getpointinbounds( 0, 0, 0 );
|
|
var_5 = [];
|
|
|
|
for ( var_6 = 0; var_6 < var_3.size; var_6++ )
|
|
{
|
|
if ( isdefined( var_3[var_6] ) )
|
|
var_5[var_6] = distance( var_3[var_6].origin, var_4 );
|
|
}
|
|
|
|
for ( var_6 = 0; var_6 < var_5.size; var_6++ )
|
|
{
|
|
if ( isdefined( var_5[var_6] ) )
|
|
{
|
|
if ( var_5[var_6] < 4000 && var_2.flaresreservecount > 0 )
|
|
{
|
|
var_2.flaresreservecount--;
|
|
var_2 thread flares_playfx();
|
|
var_7 = var_2 flares_deploy();
|
|
|
|
for ( var_8 = 0; var_8 < var_3.size; var_8++ )
|
|
{
|
|
if ( isdefined( var_3[var_8] ) )
|
|
{
|
|
var_3[var_8] missile_settargetent( var_7 );
|
|
var_3[var_8] notify( "missile_pairedWithFlare" );
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
flares_handleincomingstinger( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "crashing" );
|
|
self endon( "leaving" );
|
|
self endon( "helicopter_done" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "stinger_fired", var_1, var_2, var_3 );
|
|
|
|
if ( !isdefined( var_3 ) || var_3 != self )
|
|
continue;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_2 thread [[ var_0 ]]( var_1, var_1.team, var_3 );
|
|
continue;
|
|
}
|
|
|
|
var_2 thread flares_watchstingerproximity( var_1, var_1.team, var_3 );
|
|
}
|
|
}
|
|
|
|
flares_watchstingerproximity( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
break;
|
|
|
|
var_3 = var_2 getpointinbounds( 0, 0, 0 );
|
|
var_4 = distance( self.origin, var_3 );
|
|
|
|
if ( var_4 < 4000 && var_2.flaresreservecount > 0 )
|
|
{
|
|
var_2.flaresreservecount--;
|
|
var_2 thread flares_playfx();
|
|
var_5 = var_2 flares_deploy();
|
|
self missile_settargetent( var_5 );
|
|
self notify( "missile_pairedWithFlare" );
|
|
return;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
ks_setup_manual_flares( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self.flaresreservecount = var_0;
|
|
self.flareslive = [];
|
|
|
|
if ( isdefined( var_2 ) )
|
|
self.owner setclientomnvar( var_2, var_0 );
|
|
|
|
thread ks_manualflares_watchuse( var_1, var_2 );
|
|
thread ks_manualflares_handleincoming( var_3 );
|
|
}
|
|
|
|
ks_manualflares_watchuse( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "crashing" );
|
|
self endon( "leaving" );
|
|
self endon( "helicopter_done" );
|
|
|
|
if ( !isai( self.owner ) )
|
|
self.owner notifyonplayercommand( "manual_flare_popped", var_0 );
|
|
|
|
while ( flares_getnumleft( self ) )
|
|
{
|
|
self.owner waittill( "manual_flare_popped" );
|
|
var_2 = flares_getflarereserve( self );
|
|
|
|
if ( isdefined( var_2 ) && isdefined( self.owner ) && !isai( self.owner ) )
|
|
{
|
|
self.owner playlocalsound( "veh_helo_flares_plr" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
self.owner setclientomnvar( var_1, flares_getnumleft( self ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
ks_manualflares_handleincoming( var_0 )
|
|
{
|
|
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_1 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
continue;
|
|
|
|
self.owner playlocalsound( "missile_incoming" );
|
|
self.owner thread ks_watch_death_stop_sound( self, "missile_incoming" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_2 = vectornormalize( var_1[0].origin - self.origin );
|
|
var_3 = vectornormalize( anglestoright( self.angles ) );
|
|
var_4 = vectordot( var_2, var_3 );
|
|
var_5 = 1;
|
|
|
|
if ( var_4 > 0 )
|
|
var_5 = 2;
|
|
else if ( var_4 < 0 )
|
|
var_5 = 3;
|
|
|
|
self.owner setclientomnvar( var_0, var_5 );
|
|
}
|
|
|
|
foreach ( var_7 in var_1 )
|
|
{
|
|
if ( isvalidmissile( var_7 ) )
|
|
thread ks_manualflares_monitorproximity( var_7 );
|
|
}
|
|
}
|
|
}
|
|
|
|
ks_manualflares_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 ) )
|
|
{
|
|
var_0 missile_settargetent( var_2 );
|
|
var_0 notify( "missile_pairedWithFlare" );
|
|
self.owner 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 );
|
|
}
|