diff --git a/src/game/shared/tf/tf_weapon_medigun.cpp b/src/game/shared/tf/tf_weapon_medigun.cpp index ed55d29ef31..1719f6952b7 100644 --- a/src/game/shared/tf/tf_weapon_medigun.cpp +++ b/src/game/shared/tf/tf_weapon_medigun.cpp @@ -1252,7 +1252,6 @@ bool CWeaponMedigun::FindAndHealTargets( void ) if ( pTFPlayer && weapon_medigun_charge_rate.GetFloat() ) { -#ifdef GAME_DLL int iBoostMax = floor( pTFPlayer->m_Shared.GetMaxBuffedHealth() * 0.95); float flChargeModifier = 1.f; @@ -1309,7 +1308,7 @@ bool CWeaponMedigun::FindAndHealTargets( void ) CALL_ATTRIB_HOOK_FLOAT_ON_OTHER( pOwner, flChargeAmount, mult_medigun_uberchargerate ); - +#ifdef GAME_DLL // Apply any bonus our target gives us. if ( pTarget ) { @@ -1322,6 +1321,7 @@ bool CWeaponMedigun::FindAndHealTargets( void ) CALL_ATTRIB_HOOK_FLOAT_ON_OTHER( pTarget, flChargeAmount, mult_uberchargerate_for_healer ); } } +#endif if ( TFGameRules() ) { if ( TFGameRules()->IsQuickBuildTime() ) @@ -1333,7 +1333,6 @@ bool CWeaponMedigun::FindAndHealTargets( void ) flChargeAmount *= 3.f; } } -#endif float flNewLevel = MIN( m_flChargeLevel + flChargeAmount, 1.0 ); @@ -1611,9 +1610,25 @@ void CWeaponMedigun::ItemPostFrame( void ) m_bReloadDown = false; } +#ifdef CLIENT_DLL + DrainCharge(); +#endif + WeaponIdle(); } +//----------------------------------------------------------------------------- +// Purpose: Drain Ubercharge on client during weapon draw to fix prediction errors +//----------------------------------------------------------------------------- +void CWeaponMedigun::ItemBusyFrame( void ) +{ +#ifdef CLIENT_DLL + DrainCharge(); +#endif + + BaseClass::ItemBusyFrame(); +} + //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- @@ -1964,11 +1979,11 @@ void CWeaponMedigun::SecondaryAttack( void ) { // Remove charge immediately and just give target and yourself the conditions m_bChargeRelease = false; + SetChargeLevel( m_flChargeLevel - flChunkSize ); #ifdef GAME_DLL float flResistDuration = weapon_vaccinator_resist_duration.GetFloat(); CALL_ATTRIB_HOOK_FLOAT_ON_OTHER( pOwner, flResistDuration, add_uber_time ); pOwner->m_Shared.AddCond( g_MedigunResistConditions[GetResistType()].uberCond, flResistDuration, pOwner ); - m_flChargeLevel -= flChunkSize; if ( pTFPlayerPatient ) { pTFPlayerPatient->m_Shared.AddCond( g_MedigunResistConditions[GetResistType()].uberCond, flResistDuration, pOwner ); diff --git a/src/game/shared/tf/tf_weapon_medigun.h b/src/game/shared/tf/tf_weapon_medigun.h index 5b4fae8194f..681b8b9a335 100644 --- a/src/game/shared/tf/tf_weapon_medigun.h +++ b/src/game/shared/tf/tf_weapon_medigun.h @@ -73,6 +73,7 @@ class CWeaponMedigun : public CTFWeaponBaseGun virtual void UpdateOnRemove( void ); virtual void ItemHolsterFrame( void ); virtual void ItemPostFrame( void ); + virtual void ItemBusyFrame( void ); virtual bool Lower( void ); virtual void PrimaryAttack( void ); virtual void SecondaryAttack( void );