378 lines
9.6 KiB
Plaintext
378 lines
9.6 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
watershallowfx()
|
|
{
|
|
level._effect["water_kick"] = loadfx( "vfx/moments/flood/flood_db_foam_allie_ch_fast_cheap" );
|
|
level._effect["water_splash_emerge"] = loadfx( "vfx/moments/flood/flood_db_foam_allie_vertical_splash_sml" );
|
|
level._effect["water_splash_large"] = loadfx( "vfx/moments/flood/flood_db_foam_allie_vertical_splash_lrg" );
|
|
}
|
|
|
|
watershallowinit( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
level.waterdeletez = var_0;
|
|
|
|
level.trigunderwater = getent( "trigger_underwater", "targetname" );
|
|
level.trigabovewater = getent( "trigger_abovewater", "targetname" );
|
|
level.trigunderwater thread watchplayerenterwater( level.trigabovewater, var_1 );
|
|
level thread clearwatervarsonspawn( level.trigunderwater );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
level thread watchentsindeepwater( level.trigunderwater, var_0 );
|
|
}
|
|
|
|
watchentsindeepwater( var_0, var_1 )
|
|
{
|
|
level childthread watchentsindeepwater_mines( var_0, var_1 );
|
|
level childthread watchentsindeepwater_ks( var_0, var_1 );
|
|
}
|
|
|
|
watchentsindeepwater_ks( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.05;
|
|
var_2 = level.placedims;
|
|
var_2 = common_scripts\utility::array_combine( var_2, level.uplinks );
|
|
var_2 = common_scripts\utility::array_combine( var_2, level.turrets );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( !isdefined( var_4 ) )
|
|
continue;
|
|
|
|
var_5 = common_scripts\utility::ter_op( isdefined( var_4.sentrytype ) && var_4.sentrytype == "sentry_minigun", var_1 - 35, var_1 );
|
|
|
|
if ( var_4.origin[2] <= var_5 && var_4 istouching( var_0 ) )
|
|
var_4 notify( "death" );
|
|
}
|
|
|
|
wait 0.05;
|
|
|
|
foreach ( var_8 in level.characters )
|
|
{
|
|
if ( isdefined( var_8 ) && isalive( var_8 ) && isai( var_8 ) && var_8.origin[2] <= var_1 - 35 && var_8 istouching( var_0 ) )
|
|
{
|
|
if ( isagent( var_8 ) && isdefined( var_8.agent_type ) && var_8.agent_type == "dog" )
|
|
{
|
|
if ( !isdefined( var_8.spawntime ) || gettime() - var_8.spawntime > 2000 )
|
|
var_8 [[ var_8 maps\mp\agents\_agent_utility::agentfunc( "on_damaged" ) ]]( level, undefined, int( ceil( var_8.maxhealth * 0.08 ) ), 0, "MOD_CRUSH", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0 );
|
|
|
|
continue;
|
|
}
|
|
|
|
var_8 dodamage( int( ceil( var_8.maxhealth * 0.08 ) ), var_8.origin );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
watchentsindeepwater_mines( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "mine_planted" );
|
|
waittillframeend;
|
|
var_2 = level.mines;
|
|
|
|
foreach ( var_6, var_4 in var_2 )
|
|
{
|
|
if ( !isdefined( var_4 ) )
|
|
continue;
|
|
|
|
var_5 = 0;
|
|
|
|
if ( isdefined( var_4.istallforwaterchecks ) )
|
|
var_5 = 28;
|
|
|
|
if ( var_4.origin[2] <= var_1 - var_5 && var_4 istouching( var_0 ) )
|
|
var_4 maps\mp\gametypes\_weapons::deleteexplosive();
|
|
}
|
|
}
|
|
}
|
|
|
|
clearwatervarsonspawn( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "player_spawned", var_1 );
|
|
|
|
if ( !var_1 istouching( var_0 ) )
|
|
{
|
|
var_1.inwater = undefined;
|
|
var_1.underwater = undefined;
|
|
var_1 notify( "out_of_water" );
|
|
}
|
|
}
|
|
}
|
|
|
|
watchplayerenterwater( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger", var_2 );
|
|
|
|
if ( !isplayer( var_2 ) && !isagent( var_2 ) )
|
|
continue;
|
|
|
|
if ( !isalive( var_2 ) || isagent( var_2 ) && isdefined( var_2.agent_type ) && var_2.agent_type == "dog" )
|
|
continue;
|
|
|
|
if ( !isdefined( var_2.inwater ) )
|
|
{
|
|
var_2.inwater = 1;
|
|
var_2 thread playerinwater( self, var_0, var_1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
playersplash()
|
|
{
|
|
self endon( "out_of_water" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
var_0 = self getvelocity();
|
|
|
|
if ( var_0[2] > -100 )
|
|
return;
|
|
|
|
wait 0.2;
|
|
var_0 = self getvelocity();
|
|
|
|
if ( var_0[2] <= -100 )
|
|
{
|
|
self playsound( "watersplash_lrg" );
|
|
playfx( level._effect["water_splash_large"], self.origin + ( 0, 0, 36 ), ( 0, 0, 1 ), anglestoforward( ( 0, self.angles[1], 0 ) ) );
|
|
}
|
|
}
|
|
|
|
playerinwater( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
thread inwaterwake( var_2 );
|
|
thread playerwaterclearwait();
|
|
thread playersplash();
|
|
|
|
for (;;)
|
|
{
|
|
if ( !self istouching( var_0 ) )
|
|
{
|
|
self.inwater = undefined;
|
|
self.underwater = undefined;
|
|
self notify( "out_of_water" );
|
|
stopwatervisuals();
|
|
break;
|
|
}
|
|
|
|
if ( !isdefined( self.underwater ) && !self istouching( var_1 ) )
|
|
{
|
|
if ( self.classname == "script_vehicle" )
|
|
self notify( "death" );
|
|
else
|
|
{
|
|
self.underwater = 1;
|
|
thread playerunderwater();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.underwater ) && self istouching( var_1 ) )
|
|
{
|
|
self.underwater = undefined;
|
|
self notify( "above_water" );
|
|
stopwatervisuals();
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
if ( self hasfemalecustomizationmodel() )
|
|
self playlocalsound( "Fem_breathing_better" );
|
|
else
|
|
self playlocalsound( "breathing_better" );
|
|
}
|
|
|
|
playfx( level._effect["water_splash_emerge"], self.origin + ( 0, 0, 24 ) );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
isactivekillstreakpoolrestricted( var_0 )
|
|
{
|
|
if ( isdefined( var_0.killstreakindexweapon ) )
|
|
{
|
|
var_1 = self.pers["killstreaks"][self.killstreakindexweapon].streakname;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case "sam_turret":
|
|
case "remote_tank":
|
|
case "sentry":
|
|
case "ims":
|
|
case "minigun_turret":
|
|
case "remote_mg_turret":
|
|
case "remote_uav":
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
playerwaterclearwait()
|
|
{
|
|
common_scripts\utility::waittill_any( "death", "disconnect", "out_of_water" );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self.inwater = undefined;
|
|
self.underwater = undefined;
|
|
}
|
|
|
|
inwaterwake( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
self endon( "out_of_water" );
|
|
var_1 = common_scripts\utility::ter_op( isdefined( var_0 ), var_0, self.origin[2] );
|
|
var_2 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_2 )
|
|
wait 0.05;
|
|
else
|
|
wait 0.3;
|
|
|
|
if ( !isdefined( level.waterkicktimenext ) )
|
|
level.waterkicktimenext = gettime() + 200;
|
|
else
|
|
{
|
|
var_3 = gettime();
|
|
|
|
if ( gettime() < level.waterkicktimenext )
|
|
{
|
|
var_2 = 1;
|
|
continue;
|
|
}
|
|
else
|
|
level.waterkicktimenext = var_3 + 200;
|
|
}
|
|
|
|
var_2 = 0;
|
|
var_4 = self getvelocity();
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
if ( abs( var_4[2] ) <= 1 )
|
|
var_1 = self.origin[2];
|
|
}
|
|
|
|
if ( abs( var_4[2] ) > 30 )
|
|
{
|
|
playfx( level._effect["water_kick"], ( self.origin[0], self.origin[1], min( var_1, self.origin[2] ) ) );
|
|
continue;
|
|
}
|
|
|
|
if ( length2dsquared( var_4 ) > 3600 )
|
|
{
|
|
var_5 = vectornormalize( ( var_4[0], var_4[1], 0 ) );
|
|
playfx( level._effect["water_kick"], ( self.origin[0], self.origin[1], min( var_1, self.origin[2] ) ) + var_5 * 36, var_5, ( 0, 0, 1 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
playerunderwater()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
self endon( "above_water" );
|
|
self endon( "out_of_water" );
|
|
|
|
if ( !maps\mp\_utility::isusingremote() )
|
|
{
|
|
startwatervisuals();
|
|
thread stopwatervisualsonremote();
|
|
}
|
|
|
|
playfx( level._effect["water_splash_emerge"], self geteye() - ( 0, 0, 24 ) );
|
|
wait 2;
|
|
thread onplayerdrowned();
|
|
|
|
for (;;)
|
|
{
|
|
self dodamage( 20, self.origin );
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
onplayerdrowned()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "disconnect" );
|
|
self endon( "above_water" );
|
|
self endon( "out_of_water" );
|
|
self waittill( "death" );
|
|
self.inwater = undefined;
|
|
self.underwater = undefined;
|
|
}
|
|
|
|
underwaterbubbles()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "using_remote" );
|
|
self endon( "disconnect" );
|
|
self endon( "above_water" );
|
|
self endon( "out_of_water" );
|
|
|
|
for (;;)
|
|
{
|
|
playfx( level._effect["water_bubbles"], self geteye() + anglestoup( self.angles ) * -13 + anglestoforward( self.angles ) * 25 );
|
|
wait 0.75;
|
|
}
|
|
}
|
|
|
|
startwatervisuals()
|
|
{
|
|
self shellshock( "mp_flooded_water", 8 );
|
|
|
|
if ( isplayer( self ) )
|
|
self setblurforplayer( 10, 0.0 );
|
|
}
|
|
|
|
stopwatervisuals()
|
|
{
|
|
self stopshellshock();
|
|
|
|
if ( isplayer( self ) )
|
|
self setblurforplayer( 0, 0.85 );
|
|
}
|
|
|
|
stopwatervisualsonremote()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
self endon( "above_water" );
|
|
self endon( "out_of_water" );
|
|
self waittill( "using_remote" );
|
|
stopwatervisuals();
|
|
}
|