//-----------------------------------------------------------------------------/ // Purpose: Don't fire when EMPed //----------------------------------------------------------------------------- bool CWeaponRocketLauncher::ComputeEMPFireState( void ) { if ( IsOwnerEMPed() ) return false; return true; }
//----------------------------------------------------------------------------- // Purpose: // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool CWeaponLaserRifle::ComputeEMPFireState( void ) { if (IsOwnerEMPed()) { // FIXME: Need a sound //UTIL_EmitSound( pPlayer->pev, CHAN_WEAPON, g_pszEMPGatlingFizzle, 1.0, ATTN_NORM ); return false; } return true; }
//----------------------------------------------------------------------------- // Purpose: // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool CWeaponMortar::ComputeEMPFireState( void ) { if (IsOwnerEMPed()) { CPASAttenuationFilter filter( GetOwner(), "WeaponMortar.EMPed" ); EmitSound( filter, GetOwner()->entindex(), "WeaponMortar.EMPed" ); return false; } return true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponMortar::PrimaryAttack( void ) { CBaseTFPlayer *pPlayer = ToBaseTFPlayer( GetOwner() ); if ( !pPlayer ) return; // Can't attack if taking EMP damage if ( !ComputeEMPFireState() ) return; if ( IsOwnerEMPed() ) return; if ( m_hDeployedMortar == NULL ) return; if ( m_hDeployedMortar->FireMortar( m_flFiringPower, m_flFiringAccuracy, m_bRangeUpgraded, m_bAccuracyUpgraded ) ) { WeaponSound( SINGLE ); } m_flNextPrimaryAttack = gpGlobals->curtime + 0.5; m_flNextSecondaryAttack = gpGlobals->curtime + 0.5; CheckRemoveDisguise(); }
//----------------------------------------------------------------------------- // Purpose: Handle the shield input //----------------------------------------------------------------------------- void CWeaponCombatShield::ShieldPostFrame( void ) { CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); if (!pOwner) return; UpdateShieldState(); CheckReload(); // Store off EMP state bool isEMPed = IsOwnerEMPed(); // If the shield's unavailable, just abort if ( GetShieldState() == SS_UNAVAILABLE ) return; if ( m_flNextPrimaryAttack > gpGlobals->curtime ) return; bool shieldRaised = ( GetShieldState() == SS_UP ); bool shieldRaising = ( GetShieldState() == SS_RAISING ); // GetShieldState() == SS_LOWERING ); // If my shield's out of power, I can't do anything with it if ( !GetShieldHealth() ) return; // Was the shield button just pressed? if ( GetShieldState() == SS_DOWN && !isEMPed && pOwner->m_nButtons & IN_ATTACK2 ) { // Play sound & anim WeaponSound( SPECIAL1 ); SendWeaponAnim( ACT_VM_SECONDARYATTACK ); SetShieldState( SS_RAISING ); // Abort any reloads in progess pOwner->AbortReload(); } else if ( ( shieldRaised || shieldRaising ) && !FBitSet( pOwner->m_nButtons, IN_ATTACK2 ) ) { // Shield button was just released, check to see if we were parrying bool shouldParry = (gpGlobals->curtime < (m_flShieldUpStartTime + PARRY_DETECTION_TIME )); if ( m_bHasShieldParry && shouldParry ) { // Parry! // Play sound & anim WeaponSound( SPECIAL2 ); SendWeaponAnim( ACT_VM_SWINGHIT ); SetShieldState( SS_PARRYING ); // Bash enemies in front of me ShieldBash(); } else { // Player's just lowered his shield // Play sound & anim WeaponSound( SPECIAL2 ); SendWeaponAnim( ACT_VM_HAULBACK ); SetShieldState( SS_LOWERING ); m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration(); } } else if ( GetShieldState() == SS_UP && ( pOwner->m_nButtons & IN_ATTACK2 ) && ( isEMPed ) ) { // We've got our shield up, and we were just EMPed, so drop it // Play sound & anim SendWeaponAnim( ACT_VM_HAULBACK ); WeaponSound( SPECIAL2 ); SetShieldState( SS_LOWERING ); } }