//----------------------------------------------------------------------------- // Receive a teleporting player //----------------------------------------------------------------------------- bool CObjectTeleporter::IsMatchingTeleporterReady( void ) { if ( m_hMatchingTeleporter.Get() == NULL ) { m_hMatchingTeleporter = FindMatch(); } CObjectTeleporter *pMatch = GetMatchingTeleporter(); if ( pMatch && pMatch->GetState() != TELEPORTER_STATE_BUILDING && !pMatch->IsDisabled() && !pMatch->IsUpgrading() && !pMatch->IsRedeploying() ) return true; return false; }
bool CObjectTeleporter::Command_Repair( CTFPlayer *pActivator ) { bool bRepaired = false; int iAmountToHeal = 0; int iRepairCost = 0; // There's got to be a better way a shorter way to mirror repairs and such. if ( GetHealth() < GetMaxHealth() ) { iAmountToHeal = min( 100, GetMaxHealth() - GetHealth() ); // repair the building iRepairCost = ceil( (float)( iAmountToHeal ) * 0.2f ); TRACE_OBJECT( UTIL_VarArgs( "%0.2f CObjectDispenser::Command_Repair ( %d / %d ) - cost = %d\n", gpGlobals->curtime, GetHealth(), GetMaxHealth(), iRepairCost ) ); if ( iRepairCost > 0 ) { if ( iRepairCost > pActivator->GetBuildResources() ) { iRepairCost = pActivator->GetBuildResources(); } pActivator->RemoveBuildResources( iRepairCost ); float flNewHealth = min( GetMaxHealth(), GetHealth() + ( iRepairCost * 5 ) ); SetHealth( flNewHealth ); bRepaired = (iRepairCost > 0); CObjectTeleporter *pMatch = GetMatchingTeleporter(); if ( pMatch && pMatch->GetState() != TELEPORTER_STATE_BUILDING && !pMatch->IsUpgrading() ) { float flNewHealth = min( pMatch->GetMaxHealth(), pMatch->GetHealth() + ( iRepairCost * 5 ) ); pMatch->SetHealth( flNewHealth ); } } } else if ( GetMatchingTeleporter() ) // See if the other teleporter needs repairing { CObjectTeleporter *pMatch = GetMatchingTeleporter(); if ( pMatch->GetHealth() < pMatch->GetMaxHealth() && pMatch->GetState() != TELEPORTER_STATE_BUILDING && !pMatch->IsUpgrading() ) { iAmountToHeal = min( 100, pMatch->GetMaxHealth() - pMatch->GetHealth() ); // repair the building iRepairCost = ceil( (float)(iAmountToHeal)* 0.2f ); TRACE_OBJECT( UTIL_VarArgs( "%0.2f CObjectDispenser::Command_Repair ( %d / %d ) - cost = %d\n", gpGlobals->curtime, pMatch->GetHealth(), pMatch->GetMaxHealth(), iRepairCost ) ); if ( iRepairCost > 0 ) { if ( iRepairCost > pActivator->GetBuildResources() ) { iRepairCost = pActivator->GetBuildResources(); } pActivator->RemoveBuildResources( iRepairCost ); float flNewHealth = min( pMatch->GetMaxHealth(), pMatch->GetHealth() + ( iRepairCost * 5 ) ); pMatch->SetHealth( flNewHealth ); bRepaired = (iRepairCost > 0); } } } return bRepaired; }