Fix RPG not playing empty sound when attempting to fire with no ammo left
Resolves #196
This commit is contained in:
parent
36b7ee28e6
commit
c6b5b617b3
4 changed files with 21 additions and 3 deletions
|
@ -18,6 +18,7 @@
|
|||
* Fixed cycler_wreckage storing time value in int instead of float
|
||||
* Fixed limit in world weapons (e.g. Hand Grenade) respawning at wrong time if server is near edict limit
|
||||
* Fixed shotgun starting idle animations too quickly after exhausting all ammo using primary attack [#195](https://github.com/SamVanheer/halflife-updated/issues/195) (Thanks Ronin4862)
|
||||
* Fixed RPG not playing empty sound when attempting to fire with no ammo left [#196](https://github.com/SamVanheer/halflife-updated/issues/196) (Thanks Ronin4862)
|
||||
|
||||
## Changes in V1.0.0 Beta 014
|
||||
|
||||
|
|
17
dlls/rpg.cpp
17
dlls/rpg.cpp
|
@ -480,6 +480,12 @@ void CRpg::SecondaryAttack()
|
|||
|
||||
void CRpg::WeaponIdle()
|
||||
{
|
||||
// Reset when the player lets go of the trigger.
|
||||
if ((m_pPlayer->pev->button & (IN_ATTACK | IN_ATTACK2)) == 0)
|
||||
{
|
||||
ResetEmptySound();
|
||||
}
|
||||
|
||||
UpdateSpot();
|
||||
|
||||
if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase())
|
||||
|
@ -508,7 +514,6 @@ void CRpg::WeaponIdle()
|
|||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 6.1;
|
||||
}
|
||||
|
||||
ResetEmptySound();
|
||||
SendWeaponAnim(iAnim);
|
||||
}
|
||||
else
|
||||
|
@ -542,6 +547,16 @@ void CRpg::UpdateSpot()
|
|||
#endif
|
||||
}
|
||||
|
||||
bool CRpg::IsUseable()
|
||||
{
|
||||
// The client needs to fall through to WeaponIdle so check the ammo here.
|
||||
if (m_pPlayer->ammo_rockets <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return CBasePlayerWeapon::IsUseable();
|
||||
}
|
||||
|
||||
class CRpgAmmo : public CBasePlayerAmmo
|
||||
{
|
||||
|
|
|
@ -799,6 +799,8 @@ public:
|
|||
void UpdateSpot();
|
||||
bool ShouldWeaponIdle() override { return true; }
|
||||
|
||||
bool IsUseable() override;
|
||||
|
||||
CLaserSpot* m_pSpot;
|
||||
bool m_fSpotActive;
|
||||
int m_cActiveRockets; // how many missiles in flight from this launcher right now?
|
||||
|
|
|
@ -170,18 +170,18 @@ void CBasePlayerWeapon::ItemPostFrame()
|
|||
|
||||
m_fFireOnEmpty = false;
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
if (!IsUseable() && m_flNextPrimaryAttack < (UseDecrement() ? 0.0 : gpGlobals->time))
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
// weapon isn't useable, switch.
|
||||
if ((iFlags() & ITEM_FLAG_NOAUTOSWITCHEMPTY) == 0 && g_pGameRules->GetNextBestWeapon(m_pPlayer, this))
|
||||
{
|
||||
m_flNextPrimaryAttack = (UseDecrement() ? 0.0 : gpGlobals->time) + 0.3;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// weapon is useable. Reload if empty and weapon has waited as long as it has to after firing
|
||||
if (m_iClip == 0 && (iFlags() & ITEM_FLAG_NOAUTORELOAD) == 0 && m_flNextPrimaryAttack < (UseDecrement() ? 0.0 : gpGlobals->time))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue