Browse Source

game: restore combine elite soldiers ability to use alt-fire of SMG1

pull/100/head
SanyaSho 2 years ago
parent
commit
d628a7ae80
  1. 15
      game/server/hl2/npc_combine.cpp
  2. 60
      game/server/hl2/weapon_smg1.cpp

15
game/server/hl2/npc_combine.cpp

@ -378,7 +378,7 @@ void CNPC_Combine::PostNPCInit()
// an AR2. // an AR2.
if( !GetActiveWeapon() || !FClassnameIs( GetActiveWeapon(), "weapon_ar2" ) ) if( !GetActiveWeapon() || !FClassnameIs( GetActiveWeapon(), "weapon_ar2" ) )
{ {
DevWarning("**Combine Elite Soldier MUST be equipped with AR2\n"); // DevWarning("**Combine Elite Soldier MUST be equipped with AR2\n");
} }
} }
@ -2320,7 +2320,18 @@ void CNPC_Combine::HandleAnimEvent( animevent_t *pEvent )
{ {
if ( pEvent->event == COMBINE_AE_BEGIN_ALTFIRE ) if ( pEvent->event == COMBINE_AE_BEGIN_ALTFIRE )
{ {
EmitSound( "Weapon_CombineGuard.Special1" ); if( FClassnameIs( GetActiveWeapon(), "weapon_ar2" ) )
{
EmitSound( "Weapon_CombineGuard.Special1" );
}
else if( FClassnameIs( GetActiveWeapon(), "weapon_smg1" ) )
{
EmitSound( "Weapon_SMG1.Double" );
}
else
{
EmitSound( "Weapon_CombineGuard.Special1" );
}
handledEvent = true; handledEvent = true;
} }
else if ( pEvent->event == COMBINE_AE_ALTFIRE ) else if ( pEvent->event == COMBINE_AE_ALTFIRE )

60
game/server/hl2/weapon_smg1.cpp

@ -45,7 +45,7 @@ public:
float GetFireRate( void ) { return 0.075f; } // 13.3hz float GetFireRate( void ) { return 0.075f; } // 13.3hz
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; } int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; }
int WeaponRangeAttack2Condition( float flDot, float flDist ); int WeaponRangeAttack2Condition(/* float flDot, float flDist */);
Activity GetPrimaryAttackActivity( void ); Activity GetPrimaryAttackActivity( void );
virtual const Vector& GetBulletSpread( void ) virtual const Vector& GetBulletSpread( void )
@ -228,32 +228,50 @@ void CWeaponSMG1::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatChar
} }
break; break;
/*//FIXME: Re-enable case EVENT_WEAPON_AR2_ALTFIRE:
case EVENT_WEAPON_AR2_GRENADE:
{ {
CAI_BaseNPC *npc = pOperator->MyNPCPointer(); CAI_BaseNPC *npc = pOperator->MyNPCPointer();
Vector vecShootOrigin, vecShootDir;
vecShootOrigin = pOperator->Weapon_ShootPosition();
//vecShootDir = npc->GetShootEnemyDir( vecShootOrigin );
//Checks if it can fire the grenade
WeaponRangeAttack2Condition();
Vector vecShootOrigin, vecShootDir; Vector vecThrow = m_vecTossVelocity;
vecShootOrigin = pOperator->Weapon_ShootPosition();
vecShootDir = npc->GetShootEnemyDir( vecShootOrigin ); //If on the rare case the vector is 0 0 0, cancel for avoid launching the grenade without speed
//This should be on WeaponRangeAttack2Condition(), but for some unknown reason return CASE_NONE
//doesn't stop the launch
if( vecThrow == Vector(0, 0, 0) )
{
break;
}
Vector vecThrow = m_vecTossVelocity; CGrenadeAR2 *pGrenade = (CGrenadeAR2*)Create("grenade_ar2", vecShootOrigin, vec3_angle, npc);
pGrenade->SetAbsVelocity( vecThrow );
pGrenade->SetLocalAngularVelocity(RandomAngle(-400, 400)); //tumble in air
pGrenade->SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE );
CGrenadeAR2 *pGrenade = (CGrenadeAR2*)Create( "grenade_ar2", vecShootOrigin, vec3_angle, npc ); pGrenade->SetThrower(GetOwner());
pGrenade->SetAbsVelocity( vecThrow );
pGrenade->SetLocalAngularVelocity( QAngle( 0, 400, 0 ) );
pGrenade->SetMoveType( MOVETYPE_FLYGRAVITY );
pGrenade->m_hOwner = npc;
pGrenade->m_pMyWeaponAR2 = this;
pGrenade->SetDamage(sk_npc_dmg_ar2_grenade.GetFloat());
// FIXME: arrgg ,this is hard coded into the weapon??? pGrenade->SetGravity(0.5); // lower gravity since grenade is aerodynamic and engine doesn't know it.
m_flNextGrenadeCheck = gpGlobals->curtime + 6;// wait six seconds before even looking again to see if a grenade can be thrown.
pGrenade->SetDamage( sk_plr_dmg_smg1_grenade.GetFloat() );
if( g_pGameRules->IsSkillLevel( SKILL_HARD ) )
{
m_flNextGrenadeCheck = gpGlobals->curtime + RandomFloat(2, 3);
}
else
{
m_flNextGrenadeCheck = gpGlobals->curtime + 6;// wait six seconds before even looking again to see if a grenade can be thrown.
}
m_iClip2--; m_iClip2--;
} }
break; break;
*/
default: default:
BaseClass::Operator_HandleAnimEvent( pEvent, pOperator ); BaseClass::Operator_HandleAnimEvent( pEvent, pOperator );
@ -394,11 +412,11 @@ void CWeaponSMG1::SecondaryAttack( void )
// flDist - // flDist -
// Output : int // Output : int
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
int CWeaponSMG1::WeaponRangeAttack2Condition( float flDot, float flDist ) int CWeaponSMG1::WeaponRangeAttack2Condition(/* float flDot, float flDist */)
{ {
CAI_BaseNPC *npcOwner = GetOwner()->MyNPCPointer(); CAI_BaseNPC *npcOwner = GetOwner()->MyNPCPointer();
return COND_NONE; // return COND_NONE;
/* /*
// -------------------------------------------------------- // --------------------------------------------------------

Loading…
Cancel
Save