//----------------------------------------------------------------------------- // Hit by a friendly engineer's wrench //----------------------------------------------------------------------------- bool CObjectSentrygun::OnWrenchHit( CTFPlayer *pPlayer, CTFWrench *pWrench, Vector vecHitPos ) { bool bRepair = false; bool bUpgrade = false; bRepair = Command_Repair( pPlayer/*, pWrench->GetRepairValue()*/ ); // Don't put in upgrade metal until the object is fully healed if ( CanBeUpgraded( pPlayer ) ) { bUpgrade = CheckUpgradeOnHit( pPlayer ); } DoWrenchHitEffect( vecHitPos, bRepair, bUpgrade ); if ( !IsUpgrading() ) { // player ammo into rockets // 1 ammo = 1 shell // 2 ammo = 1 rocket // only fill rockets if we have extra shells int iPlayerMetal = pPlayer->GetAmmoCount( TF_AMMO_METAL ); // If the sentry has less that 100% ammo, put some ammo in it if ( m_iAmmoShells < m_iMaxAmmoShells && iPlayerMetal > 0 ) { int iMaxShellsPlayerCanAfford = (int)( (float)iPlayerMetal / tf_sentrygun_metal_per_shell.GetFloat() ); // cap the amount we can add int iAmountToAdd = min( SENTRYGUN_ADD_SHELLS, iMaxShellsPlayerCanAfford ); iAmountToAdd = min( ( m_iMaxAmmoShells - m_iAmmoShells ), iAmountToAdd ); pPlayer->RemoveAmmo( iAmountToAdd * tf_sentrygun_metal_per_shell.GetInt(), TF_AMMO_METAL ); m_iAmmoShells += iAmountToAdd; if ( iAmountToAdd > 0 ) { bRepair = true; } } // One rocket per two ammo iPlayerMetal = pPlayer->GetAmmoCount( TF_AMMO_METAL ); if ( m_iAmmoRockets < m_iMaxAmmoRockets && m_iUpgradeLevel == 3 && iPlayerMetal > 0 ) { int iMaxRocketsPlayerCanAfford = (int)( (float)iPlayerMetal / tf_sentrygun_metal_per_rocket.GetFloat() ); int iAmountToAdd = min( ( SENTRYGUN_ADD_ROCKETS ), iMaxRocketsPlayerCanAfford ); iAmountToAdd = min( ( m_iMaxAmmoRockets - m_iAmmoRockets ), iAmountToAdd ); pPlayer->RemoveAmmo( iAmountToAdd * tf_sentrygun_metal_per_rocket.GetFloat(), TF_AMMO_METAL ); m_iAmmoRockets += iAmountToAdd; if ( iAmountToAdd > 0 ) { bRepair = true; } } } return ( bRepair || bUpgrade ); }
//----------------------------------------------------------------------------- // Hit by a friendly engineer's wrench //----------------------------------------------------------------------------- bool CObjectSentrygun::OnWrenchHit( CTFPlayer *pPlayer ) { bool bDidWork = false; // If the player repairs it at all, we're done if ( GetHealth() < GetMaxHealth() ) { if ( Command_Repair( pPlayer ) ) { bDidWork = true; } } // Don't put in upgrade metal until the sentry is fully healed if ( !bDidWork && CanBeUpgraded( pPlayer ) ) { int iPlayerMetal = pPlayer->GetAmmoCount( TF_AMMO_METAL ); int iAmountToAdd = min( tf_sentrygun_upgrade_per_hit.GetInt(), iPlayerMetal ); if ( iAmountToAdd > ( m_iUpgradeMetalRequired - m_iUpgradeMetal ) ) iAmountToAdd = ( m_iUpgradeMetalRequired - m_iUpgradeMetal ); if ( tf_cheapobjects.GetBool() == false ) { pPlayer->RemoveAmmo( iAmountToAdd, TF_AMMO_METAL ); } m_iUpgradeMetal += iAmountToAdd; if ( iAmountToAdd > 0 ) { bDidWork = true; } if ( m_iUpgradeMetal >= m_iUpgradeMetalRequired ) { StartUpgrading(); m_iUpgradeMetal = 0; } } if ( !IsUpgrading() ) { // player ammo into rockets // 1 ammo = 1 shell // 2 ammo = 1 rocket // only fill rockets if we have extra shells int iPlayerMetal = pPlayer->GetAmmoCount( TF_AMMO_METAL ); // If the sentry has less that 100% ammo, put some ammo in it if ( m_iAmmoShells < m_iMaxAmmoShells && iPlayerMetal > 0 ) { int iMaxShellsPlayerCanAfford = (int)( (float)iPlayerMetal / tf_sentrygun_metal_per_shell.GetFloat() ); // cap the amount we can add int iAmountToAdd = min( SENTRYGUN_ADD_SHELLS, iMaxShellsPlayerCanAfford ); iAmountToAdd = min( ( m_iMaxAmmoShells - m_iAmmoShells ), iAmountToAdd ); pPlayer->RemoveAmmo( iAmountToAdd * tf_sentrygun_metal_per_shell.GetInt(), TF_AMMO_METAL ); m_iAmmoShells += iAmountToAdd; if ( iAmountToAdd > 0 ) { bDidWork = true; } } // One rocket per two ammo iPlayerMetal = pPlayer->GetAmmoCount( TF_AMMO_METAL ); if ( m_iAmmoRockets < m_iMaxAmmoRockets && m_iUpgradeLevel == 3 && iPlayerMetal > 0 ) { int iMaxRocketsPlayerCanAfford = (int)( (float)iPlayerMetal / tf_sentrygun_metal_per_rocket.GetFloat() ); int iAmountToAdd = min( ( SENTRYGUN_ADD_ROCKETS ), iMaxRocketsPlayerCanAfford ); iAmountToAdd = min( ( m_iMaxAmmoRockets - m_iAmmoRockets ), iAmountToAdd ); pPlayer->RemoveAmmo( iAmountToAdd * tf_sentrygun_metal_per_rocket.GetFloat(), TF_AMMO_METAL ); m_iAmmoRockets += iAmountToAdd; if ( iAmountToAdd > 0 ) { bDidWork = true; } } } return bDidWork; }