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

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