//----------------------------------------------------------------------------- // Purpose: Prepare the launcher to fire //----------------------------------------------------------------------------- void CGEWeaponRocketLauncher::PrimaryAttack( void ) { CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return; // If my clip is empty (and I use clips) start reload if ( UsesClipsForAmmo1() && !m_iClip1 ) { Reload(); return; } // Bring us back to center view pPlayer->ViewPunchReset(); // Note that this is a primary attack and prepare the grenade attack to pause. m_bPreLaunch = true; SendWeaponAnim( GetPrimaryAttackActivity() ); ToGEPlayer(pPlayer)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); m_flRocketSpawnTime = gpGlobals->curtime + GetFireDelay(); m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); }
void CWeaponBaseRifleGrenade::PrimaryAttack( void ) { CDODPlayer *pPlayer = ToDODPlayer( GetPlayerOwner() ); Assert( pPlayer ); // Out of ammo? if ( m_iClip1 <= 0 ) { if (m_bFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = gpGlobals->curtime + 0.2; } return; } if( pPlayer->GetWaterLevel() > 2 ) { PlayEmptySound(); m_flNextPrimaryAttack = gpGlobals->curtime + 1.0; return; } // decrement before calling PlayPrimaryAttackAnim, so we can play the empty anim if necessary m_iClip1--; SendWeaponAnim( ACT_VM_PRIMARYATTACK ); // player "shoot" animation pPlayer->SetAnimation( PLAYER_ATTACK1 ); #ifdef CLIENT_DLL if( pPlayer && !pPlayer->IsDormant() ) pPlayer->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN ); #else if( pPlayer ) pPlayer->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN ); #endif #ifndef CLIENT_DLL ShootGrenade(); #endif WeaponSound( SINGLE ); DoFireEffects(); #ifdef CLIENT_DLL CDODPlayer *p = ToDODPlayer( GetPlayerOwner() ); if( !p->m_Shared.IsInMGDeploy() ) { if ( prediction->IsFirstTimePredicted() ) p->DoRecoil( GetWeaponID(), m_pWeaponInfo->m_flRecoil ); } #endif m_flNextPrimaryAttack = m_flNextSecondaryAttack = gpGlobals->curtime + GetFireDelay(); m_flTimeWeaponIdle = gpGlobals->curtime + m_pWeaponInfo->m_flTimeToIdleAfterFire; #ifndef CLIENT_DLL IGameEvent * event = gameeventmanager->CreateEvent( "dod_stats_weapon_attack" ); if ( event ) { event->SetInt( "attacker", pPlayer->GetUserID() ); event->SetInt( "weapon", GetStatsWeaponID() ); gameeventmanager->FireEvent( event ); } #endif //CLIENT_DLL }