Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 51 additions & 15 deletions src/game/shared/tf/tf_weapon_flaregun.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#ifdef CLIENT_DLL
#include "c_tf_player.h"
#include "soundenvelope.h"
#include "prediction.h"
// Server specific.
#else
#include "tf_gamestats.h"
Expand Down Expand Up @@ -423,7 +424,9 @@ bool CTFFlareGun_Revenge::Holster( CBaseCombatWeapon *pSwitchingTo )
#endif

StopCharge();

#ifdef CLIENT_DLL
gameeventmanager->RemoveListener(this);
#endif
return BaseClass::Holster( pSwitchingTo );
}

Expand All @@ -438,6 +441,8 @@ bool CTFFlareGun_Revenge::Deploy( void )
{
pOwner->m_Shared.AddCond( TF_COND_CRITBOOSTED );
}
#elif defined( CLIENT_DLL )
gameeventmanager->AddListener(this, "player_extinguished", false);
#endif

StopCharge();
Expand Down Expand Up @@ -480,12 +485,39 @@ void CTFFlareGun_Revenge::PrimaryAttack()
{
if ( !CanAttack() )
return;
// Lets steal the base CTFFlareGun::PrimaryAttack checks and emulate it here, calling CTFFlareGun::PrimaryAttack and doing our checks afterwards can cause problems!

BaseClass::PrimaryAttack();
// Get the player owning the weapon.
CTFPlayer* pOwner = ToTFPlayer( GetPlayerOwner() );
if ( !pOwner )
return;

// Lower the reveng crit count
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( m_flChargeBeginTime > 0.0f )
return;

// Don't attack if we're underwater
if ( pOwner->GetWaterLevel() != WL_Eyes )
{
CTFWeaponBaseGun::PrimaryAttack();
}
else
{
if ( gpGlobals->curtime > m_flLastDenySoundTime )
{
WeaponSound( SPECIAL2 );
m_flLastDenySoundTime = gpGlobals->curtime + 1.0f;
}
}

#ifdef CLIENT_DLL
m_bReadyToFire = false;

// Lower the revenge crit count
if ( pOwner && ( !prediction->InPrediction() || prediction->IsFirstTimePredicted() ) )
#elif defined( GAME_DLL )
if ( pOwner )
#endif

{
int iNewRevengeCrits = MAX( pOwner->m_Shared.GetRevengeCrits() - 1, 0 );
pOwner->m_Shared.SetRevengeCrits( iNewRevengeCrits );
Expand Down Expand Up @@ -603,22 +635,26 @@ bool CTFFlareGun_Revenge::ExtinguishPlayerInternal( CTFPlayer *pTarget, CTFPlaye
}

#ifdef CLIENT_DLL
void CTFFlareGun_Revenge::OnDataChanged( DataUpdateType_t type )
void CTFFlareGun_Revenge::FireGameEvent( IGameEvent *event )
{
BaseClass::OnDataChanged( type );

CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( pOwner )
if ( FStrEq( event->GetName(), "player_extinguished" ) )
{
if ( m_nOldRevengeCrits < pOwner->m_Shared.GetRevengeCrits() )
{
DoAbsorbEffect();
}

m_nOldRevengeCrits = pOwner->m_Shared.GetRevengeCrits();
C_TFPlayer* pLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
if ( !pLocalPlayer )
return;

if ( event->GetInt( "healer" ) != pLocalPlayer->entindex() )
return;

DoAbsorbEffect();
}
}

void CTFFlareGun_Revenge::OnDataChanged( DataUpdateType_t type )
{
BaseClass::OnDataChanged( type );
}

void CTFFlareGun_Revenge::DoAbsorbEffect( void )
{
WeaponSound( SPECIAL1 );
Expand Down
10 changes: 7 additions & 3 deletions src/game/shared/tf/tf_weapon_flaregun.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ class CTFFlareGun : public CTFWeaponBaseGun
int m_iFlareCount;
#endif

float m_flLastDenySoundTime;
CNetworkVar(float, m_flChargeBeginTime);
#ifdef CLIENT_DLL
bool m_bReadyToFire;
#endif

protected:
void StartChargeStartTime() { m_flChargeBeginTime = gpGlobals->curtime; }

Expand All @@ -97,14 +103,11 @@ class CTFFlareGun : public CTFWeaponBaseGun

private:

CNetworkVar( float, m_flChargeBeginTime );

bool m_bEffectsThinking;
float m_flLastDenySoundTime;

#if defined( CLIENT_DLL )
CSoundPatch *m_pChargeLoop;
bool m_bReadyToFire;
#endif

CTFFlareGun( const CTFFlareGun & ) {}
Expand Down Expand Up @@ -150,6 +153,7 @@ class CTFFlareGun_Revenge : public CTFFlareGun
#ifdef CLIENT_DLL
virtual void OnDataChanged( DataUpdateType_t type );
void DoAbsorbEffect( void );
virtual void FireGameEvent(IGameEvent *event) OVERRIDE;
#endif

private:
Expand Down