This commit is contained in:
FlaminSarge 2025-04-04 00:44:36 -07:00 committed by GitHub
commit 8ced6b295a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 67 additions and 49 deletions

View file

@ -278,7 +278,7 @@ void CBaseObject::UpdateOnRemove( void )
CTFPlayer *pSapperOwner = pSapper->GetOwner();
if ( pSapperOwner )
{
pSapperOwner->m_Shared.IncrementRevengeCrits();
pSapperOwner->m_Shared.AddRevengeCrits( 1 );
}
}

View file

@ -12037,7 +12037,7 @@ void CTFPlayer::Event_Killed( const CTakeDamageInfo &info )
// Revenge Crits for Diamondback
if ( info.GetDamageCustom() == TF_DMG_CUSTOM_BACKSTAB )
{
pPlayerAttacker->m_Shared.IncrementRevengeCrits();
pPlayerAttacker->m_Shared.AddRevengeCrits( 1 );
}
}

View file

@ -476,6 +476,7 @@ BEGIN_PREDICTION_DATA_NO_BASE( CTFPlayerShared )
DEFINE_PRED_ARRAY( m_flItemChargeMeter, FIELD_FLOAT, LAST_LOADOUT_SLOT_WITH_CHARGE_METER, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_iStunIndex, FIELD_INTEGER, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_bScattergunJump, FIELD_BOOLEAN, 0 ),
DEFINE_PRED_FIELD( m_iRevengeCrits, FIELD_INTEGER, FTYPEDESC_INSENDTABLE ),
END_PREDICTION_DATA()
// Server specific.
@ -14348,9 +14349,9 @@ void CTFPlayerShared::PulseKingRuneBuff( void )
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFPlayerShared::IncrementRevengeCrits( void )
void CTFPlayerShared::AddRevengeCrits( int iCrits )
{
SetRevengeCrits( m_iRevengeCrits + 1 );
SetRevengeCrits( m_iRevengeCrits + iCrits );
}
//-----------------------------------------------------------------------------

View file

@ -662,7 +662,7 @@ public:
void SetRevengeCrits( int iVal );
int GetRevengeCrits( void ) const { return m_iRevengeCrits; }
void IncrementRevengeCrits( void );
void AddRevengeCrits( int iCrits );
int GetSequenceForDeath( CBaseAnimating* pRagdoll, bool bBurning, int nCustomDeath );

View file

@ -113,32 +113,39 @@ void CTFFlareGun::DestroySounds( void )
// Purpose:
//-----------------------------------------------------------------------------
void CTFFlareGun::PrimaryAttack( void )
{
if ( !CanAttack() )
return;
BaseClass::PrimaryAttack();
#ifdef CLIENT_DLL
m_bReadyToFire = false;
#endif
}
bool CTFFlareGun::CanAttack( void )
{
// Get the player owning the weapon.
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( !pOwner )
return;
return false;
if ( m_flChargeBeginTime > 0.0f )
return;
return false;
// Don't attack if we're underwater
if ( pOwner->GetWaterLevel() != WL_Eyes )
{
BaseClass::PrimaryAttack();
}
else
if ( pOwner->GetWaterLevel() >= WL_Eyes )
{
if ( gpGlobals->curtime > m_flLastDenySoundTime )
{
WeaponSound( SPECIAL2 );
m_flLastDenySoundTime = gpGlobals->curtime + 1.0f;
}
return false;
}
#ifdef CLIENT_DLL
m_bReadyToFire = false;
#endif
return BaseClass::CanAttack();
}
//-----------------------------------------------------------------------------
@ -149,7 +156,8 @@ void CTFFlareGun::SecondaryAttack( void )
if ( GetFlareGunType() != FLAREGUN_DETONATE )
return;
if ( !CanAttack() )
// Detonator is allowed to detonate even if underwater, but not if base CanAttack fails
if ( !BaseClass::CanAttack() )
return;
CTFPlayer *pPlayer = ToTFPlayer( GetOwner() );
@ -476,20 +484,22 @@ int CTFFlareGun_Revenge::GetCount( void )
return 0;
}
void CTFFlareGun_Revenge::PrimaryAttack()
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CBaseEntity *CTFFlareGun_Revenge::FireProjectile( CTFPlayer *pPlayer )
{
if ( !CanAttack() )
return;
CBaseEntity *pProjectile = BaseClass::FireProjectile( pPlayer );
BaseClass::PrimaryAttack();
// Lower the reveng crit count
// Lower the revenge crit count
// Do this after the attack, so that we know if we are doing custom damage
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( pOwner )
{
int iNewRevengeCrits = MAX( pOwner->m_Shared.GetRevengeCrits() - 1, 0 );
pOwner->m_Shared.SetRevengeCrits( iNewRevengeCrits );
pOwner->m_Shared.AddRevengeCrits( -1 );
}
return pProjectile;
}
void CTFFlareGun_Revenge::SecondaryAttack( void )
@ -551,7 +561,7 @@ void CTFFlareGun_Revenge::ChargePostFrame( void )
if ( pBurner && pBurner->GetTeamNumber() != pOwner->GetTeamNumber() )
{
// Grant revenge crits
pOwner->m_Shared.SetRevengeCrits( pOwner->m_Shared.GetRevengeCrits() + 1 );
pOwner->m_Shared.AddRevengeCrits( 1 );
// Return health to the Pyro.
int iRestoreHealthOnExtinguish = 0;
@ -614,13 +624,14 @@ void CTFFlareGun_Revenge::OnDataChanged( DataUpdateType_t type )
{
DoAbsorbEffect();
}
m_nOldRevengeCrits = pOwner->m_Shared.GetRevengeCrits();
}
}
void CTFFlareGun_Revenge::DoAbsorbEffect( void )
{
// Flaregun/manmelter don't define this???
WeaponSound( SPECIAL1 );
CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() );

View file

@ -52,6 +52,7 @@ public:
virtual void DestroySounds( void );
virtual int GetWeaponID( void ) const { return TF_WEAPON_FLAREGUN; }
virtual bool CanAttack( void ) OVERRIDE;
virtual void PrimaryAttack();
virtual void SecondaryAttack();
@ -141,7 +142,7 @@ public:
const char* GetMuzzleFlashParticleEffect( void ) { return "drg_manmelter_muzzleflash"; }
virtual void PrimaryAttack();
virtual CBaseEntity *FireProjectile( CTFPlayer *pPlayer ) OVERRIDE;
virtual void SecondaryAttack( void );
virtual void ChargePostFrame( void );
virtual const char* GetChargeEffect( void ) const { return "drg_manmelter_vacuum"; }

View file

@ -117,6 +117,24 @@ bool CTFRevolver::CanFireCriticalShot( bool bIsHeadshot, CBaseEntity *pTarget /*
return true;
}
CBaseEntity *CTFRevolver::FireProjectile( CTFPlayer *pPlayer )
{
CBaseEntity *pProjectile = BaseClass::FireProjectile( pPlayer );
if ( SapperKillsCollectCrits() )
{
// Lower the revenge crit count
// Do this after the attack, so that we know if we are doing custom damage
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( pOwner )
{
pOwner->m_Shared.AddRevengeCrits( -1 );
}
}
return pProjectile;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
@ -156,19 +174,6 @@ void CTFRevolver::PrimaryAttack( void )
m_flLastAccuracyCheck = gpGlobals->curtime;
if ( SapperKillsCollectCrits() )
{
// Do this after the attack, so that we know if we are doing custom damage
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( pOwner )
{
int iRevengeCrits = pOwner->m_Shared.GetRevengeCrits();
if ( iRevengeCrits > 0 )
{
pOwner->m_Shared.SetRevengeCrits( iRevengeCrits-1 );
}
}
}
#ifdef GAME_DLL
// Lower bonus for each attack
int iExtraDamageOnHitPenalty = 0;

View file

@ -41,6 +41,7 @@ public:
virtual bool CanFireCriticalShot( bool bIsHeadshot, CBaseEntity *pTarget = NULL ) OVERRIDE;
virtual CBaseEntity *FireProjectile( CTFPlayer *pPlayer ) OVERRIDE;
virtual void PrimaryAttack( void );
virtual float GetWeaponSpread( void );

View file

@ -129,20 +129,19 @@ void CTFShotgun_Revenge::Precache()
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFShotgun_Revenge::PrimaryAttack()
CBaseEntity *CTFShotgun_Revenge::FireProjectile( CTFPlayer *pPlayer )
{
if ( !CanAttack() )
return;
BaseClass::PrimaryAttack();
CBaseEntity *pProjectile = BaseClass::FireProjectile( pPlayer );
// Lower the revenge crit count
// Do this after the attack, so that we know if we are doing custom damage
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( pOwner )
{
int iRevengeCrits = pOwner->m_Shared.GetRevengeCrits();
pOwner->m_Shared.SetRevengeCrits( iRevengeCrits-1 );
pOwner->m_Shared.AddRevengeCrits( -1 );
}
return pProjectile;
}
//-----------------------------------------------------------------------------
@ -157,7 +156,7 @@ void CTFShotgun_Revenge::SentryKilled( int iCrits )
CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() );
if ( pOwner )
{
pOwner->m_Shared.SetRevengeCrits( pOwner->m_Shared.GetRevengeCrits() + iCrits );
pOwner->m_Shared.AddRevengeCrits( iCrits );
}
}
}

View file

@ -83,7 +83,7 @@ public:
virtual int GetWeaponID( void ) const { return TF_WEAPON_SENTRY_REVENGE; }
void Precache();
virtual void PrimaryAttack();
virtual CBaseEntity *FireProjectile( CTFPlayer *pPlayer ) OVERRIDE;
virtual void SentryKilled( int iKills );
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
virtual bool Deploy( void );