mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
234 lines
5.8 KiB
Plaintext
234 lines
5.8 KiB
Plaintext
|
||
#include maps\_utility;
|
||
#include common_scripts\utility;
|
||
#include animscripts\Utility;
|
||
#include animscripts\combat_utility;
|
||
#include animscripts\anims_table;
|
||
#using_animtree( "generic_human" );
|
||
init_rusher()
|
||
{
|
||
level.RUSHER_DEFAULT_GOALRADIUS = 64;
|
||
level.RUSHER_DEFAULT_PATHENEMYDIST = 64;
|
||
level.RUSHER_PISTOL_PATHENEMYDIST = 300;
|
||
}
|
||
rush( endon_flag, timeout )
|
||
{
|
||
self endon("death");
|
||
if( !IsAlive( self ) )
|
||
return;
|
||
if( IsDefined( self.rusher ) )
|
||
return;
|
||
self.rusher = true;
|
||
if( self.animType == "vc" )
|
||
{
|
||
self.moveplaybackrate = 1.6;
|
||
}
|
||
self set_rusher_type();
|
||
self setup_rusher_anims();
|
||
self.oldgoalradius = self.goalradius;
|
||
self.goalradius = level.RUSHER_DEFAULT_GOALRADIUS;
|
||
if( self.rusherType == "pistol" )
|
||
{
|
||
self.oldpathenemyFightdist = self.pathenemyFightdist;
|
||
self.pathenemyFightdist = level.RUSHER_PISTOL_PATHENEMYDIST;
|
||
}
|
||
else
|
||
{
|
||
self.oldpathenemyFightdist = self.pathenemyFightdist;
|
||
self.pathenemyFightdist = level.RUSHER_DEFAULT_PATHENEMYDIST;
|
||
self.disableExits = true;
|
||
self.disableArrivals = true;
|
||
}
|
||
self disable_react();
|
||
self.ignoresuppression = true;
|
||
self.health = self.health + 100;
|
||
player = get_closest_player( self.origin );
|
||
self.rushing_goalent = Spawn( "script_origin", player.origin );
|
||
self.rushing_goalent LinkTo( player );
|
||
self thread keep_rushing_player( player );
|
||
if( !IsDefined( self.noWoundedRushing ) || self.noWoundedRushing == false )
|
||
{
|
||
self thread change_to_wounded();
|
||
}
|
||
self thread rusher_yelling();
|
||
if( IsDefined( endon_flag ) || IsDefined( timeout ) )
|
||
{
|
||
self thread rusher_go_back_to_normal( endon_flag, timeout );
|
||
}
|
||
}
|
||
rusher_go_back_to_normal( endon_flag, timeout )
|
||
{
|
||
self endon("death");
|
||
if( IsDefined( timeout ) )
|
||
{
|
||
self thread notifyTimeOut( timeout, false, "stop_rushing_timeout" );
|
||
}
|
||
if( !IsDefined( endon_flag ) )
|
||
endon_flag = "nothing";
|
||
self waittill_any( endon_flag , "stop_rushing_timeout");
|
||
self notify("stop_rushing");
|
||
self rusher_reset();
|
||
}
|
||
rusher_reset()
|
||
{
|
||
self reset_rusher_anims();
|
||
self.rusher = false;
|
||
self.goalradius = self.oldgoalradius;
|
||
self.pathenemyFightdist = self.oldpathenemyFightdist;
|
||
self.moveplaybackrate = 1;
|
||
self enable_react();
|
||
self.ignoresuppression = false;
|
||
self.disableExits = false;
|
||
self.disableArrivals = false;
|
||
self.rushing_goalent Delete();
|
||
}
|
||
change_to_wounded()
|
||
{
|
||
self endon( "death" );
|
||
self endon("stop_rushing");
|
||
self.isRusherWounded = false;
|
||
woundedTrheshold = self.health - 100;
|
||
while(1)
|
||
{
|
||
if( self.health > woundedTrheshold )
|
||
{
|
||
wait(0.05);
|
||
continue;
|
||
}
|
||
self.alwaysRunForward = true;
|
||
self.moveplaybackrate = 1;
|
||
setup_rusher_wounded_anim();
|
||
break;
|
||
}
|
||
}
|
||
keep_rushing_player( player )
|
||
{
|
||
self endon("death");
|
||
self endon("stop_rushing");
|
||
while(1)
|
||
{
|
||
self SetGoalEntity( self.rushing_goalent );
|
||
self thread notifyTimeOut( 5, true, "timeout" );
|
||
self waittill_any("goal", "timeout");
|
||
}
|
||
}
|
||
notifyTimeOut( timeout, endon_goal, notify_string )
|
||
{
|
||
self endon ( "death" );
|
||
self endon("stop_rushing");
|
||
if( IsDefined( endon_goal ) && endon_goal )
|
||
{
|
||
self endon ( "goal" );
|
||
}
|
||
wait ( timeOut );
|
||
self notify ( notify_string );
|
||
}
|
||
rusher_yelling()
|
||
{
|
||
self endon("death");
|
||
self endon("stop_rushing");
|
||
if( IsDefined( self.noRusherYell ) && self.noRusherYell )
|
||
return;
|
||
while(1)
|
||
{
|
||
wait( RandomFloatRange( 1, 3 ) );
|
||
self PlaySound ("chr_npc_charge_viet");
|
||
}
|
||
}
|
||
set_rusher_type()
|
||
{
|
||
if( self usingShotgun() )
|
||
{
|
||
self.rusherType = "shotgun";
|
||
self.perfectAim = 1;
|
||
self.noRusherYell = true;
|
||
self.noWoundedRushing = true;
|
||
}
|
||
else if( self usingPistol() )
|
||
{
|
||
self.rusherType = "pistol";
|
||
self.noRusherYell = true;
|
||
self.noWoundedRushing = true;
|
||
self.disableIdleStrafing = true;
|
||
self.disableArrivals = true;
|
||
self.disableExits = true;
|
||
self.disableReact = true;
|
||
self.disableTurns = true;
|
||
self.leftGunModel = Spawn("script_model", self.origin);
|
||
self.leftGunModel SetModel( GetWeaponModel( self.weapon ) );
|
||
self.leftGunModel UseWeaponHideTags( self.weapon );
|
||
self.leftGunModel LinkTo( self, "tag_weapon_left", (0,0,0), (0,0,0) );
|
||
self.rightGunModel = Spawn("script_model", self.origin);
|
||
self.rightGunModel SetModel( GetWeaponModel( self.weapon ) );
|
||
self.rightGunModel UseWeaponHideTags( self.weapon );
|
||
self.rightGunModel LinkTo( self, "tag_weapon_right", (0,0,0), (0,0,0) );
|
||
self.rightGunModel Hide();
|
||
self.secondGunHand = "left";
|
||
self thread dualWeaponDropLogic();
|
||
self thread fakeDualWieldShooting();
|
||
self thread deleteFakeWeaponsOnDeath();
|
||
}
|
||
else
|
||
{
|
||
self.rusherType = "default";
|
||
if( self.animType == "spetsnaz" )
|
||
{
|
||
self.noRusherYell = true;
|
||
self.noWoundedRushing = true;
|
||
}
|
||
}
|
||
}
|
||
fakeDualWieldShooting()
|
||
{
|
||
self endon("death");
|
||
while(1)
|
||
{
|
||
self waittill("shoot");
|
||
if( self.secondGunHand == "left" )
|
||
{
|
||
self animscripts\shared::placeWeaponOn( self.weapon, "left" );
|
||
self.leftGunModel Hide();
|
||
self.rightGunModel Show();
|
||
self.secondGunHand = "right";
|
||
}
|
||
else
|
||
{
|
||
self animscripts\shared::placeWeaponOn( self.weapon, "right" );
|
||
self.leftGunModel Show();
|
||
self.rightGunModel Hide();
|
||
self.secondGunHand = "left";
|
||
}
|
||
}
|
||
}
|
||
deleteFakeWeaponsOnDeath()
|
||
{
|
||
self waittill("death");
|
||
self.leftGunModel Delete();
|
||
self.rightGunModel Delete();
|
||
}
|
||
dualWeaponDropLogic()
|
||
{
|
||
dualWeaponName = "";
|
||
switch( self.weapon )
|
||
{
|
||
case "makarov_sp":
|
||
dualWeaponName = "makarovdw_sp";
|
||
break;
|
||
case "cz75_sp":
|
||
dualWeaponName = "cz75dw_sp";
|
||
break;
|
||
case "cz75_auto_sp":
|
||
dualWeaponName = "cz75dw_auto_sp";
|
||
break;
|
||
case "python_sp":
|
||
dualWeaponName = "pythondw_sp";
|
||
break;
|
||
case "m1911_sp":
|
||
dualWeaponName = "m1911dw_sp";
|
||
break;
|
||
}
|
||
if( IsAssetLoaded("weapon", dualWeaponName) )
|
||
{
|
||
self.script_dropweapon = dualWeaponName;
|
||
}
|
||
} |