263 lines
6.3 KiB
Plaintext
263 lines
6.3 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
doorenterexitcheck()
|
|
{
|
|
self endon( "killanimscript" );
|
|
|
|
if ( isdefined( self.disabledoorbehavior ) )
|
|
return;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = self getdoorpathnode();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
break;
|
|
|
|
wait 0.2;
|
|
}
|
|
|
|
var_1 = var_0.type == "Door Interior" || self comparenodedirtopathdir( var_0 );
|
|
|
|
if ( var_1 )
|
|
doorenter( var_0 );
|
|
else
|
|
doorexit( var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
var_2 = self getdoorpathnode();
|
|
|
|
if ( !isdefined( var_2 ) || var_2 != var_0 )
|
|
break;
|
|
|
|
wait 0.2;
|
|
}
|
|
|
|
thread doorenterexitcheck();
|
|
}
|
|
|
|
teamflashbangimmune()
|
|
{
|
|
self endon( "killanimscript" );
|
|
self.teamflashbangimmunity = 1;
|
|
wait 5;
|
|
self.teamflashbangimmunity = undefined;
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
dodoorgrenadethrow( var_0 )
|
|
{
|
|
thread teamflashbangimmune();
|
|
|
|
if ( self.grenadeweapon == "flash_grenade" )
|
|
self notify( "flashbang_thrown" );
|
|
|
|
self orientmode( "face current" );
|
|
var_0.nextdoorgrenadetime = gettime() + 5000;
|
|
self.minindoortime = gettime() + 100000;
|
|
self notify( "move_interrupt" );
|
|
self.update_move_anim_type = undefined;
|
|
self clearanim( %combatrun, 0.2 );
|
|
self.a.movement = "stop";
|
|
self waittill( "done_grenade_throw" );
|
|
self orientmode( "face default" );
|
|
self.minindoortime = gettime() + 5000;
|
|
self.grenadeweapon = self.oldgrenadeweapon;
|
|
self.oldgrenadeweapon = undefined;
|
|
animscripts\run::endfaceenemyaimtracking();
|
|
thread animscripts\move::pathchangelistener();
|
|
thread animscripts\move::restartmoveloop( 1 );
|
|
}
|
|
|
|
doorenter_trygrenade( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = 0;
|
|
var_6 = 3;
|
|
var_7 = undefined;
|
|
var_7 = %cqb_stand_grenade_throw;
|
|
var_8 = anglestoforward( var_0.angles );
|
|
|
|
if ( var_0.type == "Door Interior" && !self comparenodedirtopathdir( var_0 ) )
|
|
var_8 = -1 * var_8;
|
|
|
|
var_9 = ( var_0.origin[0], var_0.origin[1], var_0.origin[2] + 64 );
|
|
var_10 = var_9;
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_11 = anglestoright( var_0.angles );
|
|
var_12 = var_0.origin - self.origin;
|
|
var_13 = vectordot( var_11, var_12 );
|
|
|
|
if ( var_13 > 20 )
|
|
var_13 = 20;
|
|
else if ( var_13 < -20 )
|
|
var_13 = -20;
|
|
|
|
var_10 = var_9 + var_13 * var_11;
|
|
}
|
|
|
|
while ( var_6 > 0 )
|
|
{
|
|
if ( isdefined( self.grenade ) || !isdefined( self.enemy ) )
|
|
return;
|
|
|
|
if ( onsamesideofdoor( var_0, var_8 ) )
|
|
return;
|
|
|
|
if ( !self seerecently( self.enemy, 0.2 ) && self.a.pose == "stand" && distance2dandheightcheck( self.enemy.origin - var_0.origin, 360000, 16384 ) )
|
|
{
|
|
if ( isdefined( var_0.nextdoorgrenadetime ) && var_0.nextdoorgrenadetime > gettime() )
|
|
return;
|
|
|
|
if ( self canshootenemy() )
|
|
return;
|
|
|
|
var_12 = var_0.origin - self.origin;
|
|
|
|
if ( lengthsquared( var_12 ) < var_3 )
|
|
return;
|
|
|
|
if ( vectordot( var_12, var_8 ) < 0 )
|
|
return;
|
|
|
|
self.oldgrenadeweapon = self.grenadeweapon;
|
|
self.grenadeweapon = var_1;
|
|
animscripts\combat_utility::setactivegrenadetimer( self.enemy );
|
|
|
|
if ( !var_5 )
|
|
{
|
|
var_14 = var_9 + var_8 * 100;
|
|
|
|
if ( !self isgrenadepossafe( self.enemy, var_14, 128 ) )
|
|
return;
|
|
}
|
|
|
|
var_5 = 1;
|
|
|
|
if ( animscripts\combat_utility::trygrenadethrow( self.enemy, var_10, var_7, animscripts\combat_utility::getgrenadethrowoffset( var_7 ), 1, 0, 1 ) )
|
|
{
|
|
dodoorgrenadethrow( var_0 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
var_6--;
|
|
wait( var_4 );
|
|
var_15 = self getdoorpathnode();
|
|
|
|
if ( !isdefined( var_15 ) || var_15 != var_0 )
|
|
return;
|
|
}
|
|
}
|
|
|
|
indoorcqbtogglecheck()
|
|
{
|
|
self endon( "killanimscript" );
|
|
|
|
if ( isdefined( self.disabledoorbehavior ) )
|
|
return;
|
|
|
|
self.isindoor = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( self isindoor() && !self.doingambush )
|
|
doorenter_enable_cqbwalk();
|
|
else if ( !isdefined( self.minindoortime ) || self.minindoortime < gettime() )
|
|
{
|
|
self.minindoortime = undefined;
|
|
doorexit_disable_cqbwalk();
|
|
}
|
|
|
|
wait 0.2;
|
|
}
|
|
}
|
|
|
|
doorenter_enable_cqbwalk()
|
|
{
|
|
if ( !isdefined( self.neverenablecqb ) && !self.doingambush )
|
|
{
|
|
self.isindoor = 1;
|
|
|
|
if ( !isdefined( self.cqbwalking ) || !self.cqbwalking )
|
|
maps\_utility::enable_cqbwalk( 1 );
|
|
}
|
|
}
|
|
|
|
doorexit_disable_cqbwalk()
|
|
{
|
|
if ( !isdefined( self.cqbenabled ) )
|
|
{
|
|
self.isindoor = 0;
|
|
|
|
if ( isdefined( self.cqbwalking ) && self.cqbwalking )
|
|
maps\_utility::disable_cqbwalk();
|
|
}
|
|
}
|
|
|
|
distance2dandheightcheck( var_0, var_1, var_2 )
|
|
{
|
|
return var_0[0] * var_0[0] + var_0[1] * var_0[1] < var_1 && var_0[2] * var_0[2] < var_2;
|
|
}
|
|
|
|
onsamesideofdoor( var_0, var_1 )
|
|
{
|
|
var_2 = var_0.origin - self.origin;
|
|
var_3 = var_0.origin - self.enemy.origin;
|
|
return vectordot( var_2, var_1 ) * vectordot( var_3, var_1 ) > 0;
|
|
}
|
|
|
|
doorenter( var_0 )
|
|
{
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self.doorfragchance ) && ( self.doorfragchance == 0 || self.doorfragchance < randomfloat( 1 ) ) )
|
|
break;
|
|
|
|
if ( distance2dandheightcheck( self.origin - var_0.origin, 562500, 25600 ) )
|
|
{
|
|
doorenter_trygrenade( var_0, "fraggrenade", 0, 302500, 0.3 );
|
|
var_0 = self getdoorpathnode();
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
break;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
if ( distance2dandheightcheck( self.origin - var_0.origin, 36864, 6400 ) )
|
|
{
|
|
doorenter_enable_cqbwalk();
|
|
self.minindoortime = gettime() + 6000;
|
|
|
|
if ( isdefined( self.doorflashchance ) && ( self.doorflashchance == 0 || self.doorflashchance < randomfloat( 1 ) ) )
|
|
return;
|
|
|
|
doorenter_trygrenade( var_0, "flash_grenade", 1, 4096, 0.2 );
|
|
return;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
doorexit( var_0 )
|
|
{
|
|
for (;;)
|
|
{
|
|
if ( !self.isindoor || distancesquared( self.origin, var_0.origin ) < 1024 )
|
|
return;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|