//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CTFHunterRifle::CanHolster( void ) const { CTFPlayer *pPlayer = GetTFPlayerOwner(); if ( pPlayer ) { // don't allow us to holster this weapon if we're in the process of zooming and // we've just fired the weapon (next primary attack is only 1.5 seconds after firing) if ( ( pPlayer->GetFOV() < pPlayer->GetDefaultFOV() ) && ( m_flNextPrimaryAttack > gpGlobals->curtime ) ) { return false; } } return BaseClass::CanHolster(); }
//----------------------------------------------------------------------------- // Purpose: Secondary attack. //----------------------------------------------------------------------------- void CTFSniperRifle::Zoom( void ) { // Don't allow the player to zoom in while jumping CTFPlayer *pPlayer = GetTFPlayerOwner(); if ( pPlayer && pPlayer->m_Shared.IsJumping() ) { if ( pPlayer->GetFOV() >= 75 ) return; } ToggleZoom(); // at least 0.1 seconds from now, but don't stomp a previous value m_flNextPrimaryAttack = max( m_flNextPrimaryAttack, gpGlobals->curtime + 0.1 ); m_flNextSecondaryAttack = gpGlobals->curtime + TF_WEAPON_SNIPERRIFLE_ZOOM_TIME; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CTFHunterRifle::CanFireCriticalShot( bool bIsHeadshot ) { // can only fire a crit shot if this is a headshot if ( !bIsHeadshot ) return false; CTFPlayer *pPlayer = GetTFPlayerOwner(); if ( pPlayer ) { // no crits if they're not zoomed if ( pPlayer->GetFOV() >= pPlayer->GetDefaultFOV() ) { return false; } // no crits for 0.2 seconds after starting to zoom if ( ( gpGlobals->curtime - pPlayer->GetFOVTime() ) < TF_WEAPON_HUNTERRIFLE_NO_CRIT_AFTER_ZOOM_TIME ) { return false; } } return true; }