//----------------------------------------------------------------------------- // Purpose: // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool CTFHunterRifle::Reload(void) { if ( BaseClass::Reload() == true ) { if ( IsZoomed() ) ZoomOut(); if ( Clip1() > 0 ) m_iClip1 = 0; return true; } return false; }
bool CWeaponDODBase::IsUseable() { CBasePlayer *pPlayer = GetPlayerOwner(); if ( Clip1() <= 0 ) { if ( pPlayer->GetAmmoCount( GetPrimaryAmmoType() ) <= 0 && GetMaxClip1() != -1 ) { // clip is empty (or nonexistant) and the player has no more ammo of this type. return false; } } return true; }
//----------------------------------------------------------------------------- // Purpose: Play finish reload anim and fill clip // Input : // Output : //----------------------------------------------------------------------------- void CWeaponShotgun::FillClip( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( pOwner == NULL ) return; // Add them to the clip if ( pOwner->GetAmmoCount( m_iPrimaryAmmoType ) > 0 ) { if ( Clip1() < GetMaxClip1() ) { m_iClip1++; pOwner->RemoveAmmo( 1, m_iPrimaryAmmoType ); } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFHunterRifle::ZoomIn( void ) { // Start aiming. CTFPlayer *pPlayer = GetTFPlayerOwner(); if ( !pPlayer ) return; if (pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 || Clip1() <= 0) return; pPlayer->SetFOV(pPlayer, TF_WEAPON_ZOOM_FOV, 0.1f); //BaseClass::ZoomIn(); pPlayer->m_Shared.AddCond( TF_COND_AIMING ); pPlayer->TeamFortress_SetSpeed(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFRocketLauncher::ItemPostFrame( void ) { CTFPlayer *pOwner = ToTFPlayer( GetOwnerEntity() ); if ( !pOwner ) return; BaseClass::ItemPostFrame(); #ifdef GAME_DLL if ( m_flShowReloadHintAt && m_flShowReloadHintAt < gpGlobals->curtime ) { if ( Clip1() < GetMaxClip1() ) { pOwner->HintMessage( HINT_SOLDIER_RPG_RELOAD ); } m_flShowReloadHintAt = 0; } /* Vector forward; AngleVectors( pOwner->EyeAngles(), &forward ); trace_t tr; CTraceFilterSimple filter( pOwner, COLLISION_GROUP_NONE ); UTIL_TraceLine( pOwner->EyePosition(), pOwner->EyePosition() + forward * 2000, MASK_SOLID, &filter, &tr ); if ( tr.m_pEnt && tr.m_pEnt->IsPlayer() && tr.m_pEnt->IsAlive() && tr.m_pEnt->GetTeamNumber() != pOwner->GetTeamNumber() ) { m_bLockedOn = true; } else { m_bLockedOn = false; } */ #endif }
//----------------------------------------------------------------------------- // Purpose: Play finish reload anim and fill clip // Input : // Output : //----------------------------------------------------------------------------- void CWeapon870AE::FillClip( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( pOwner == NULL ) return; CBasePlayer *pPlayer = ToBasePlayer(pOwner); if (!pPlayer) return; // Add them to the clip if ( pPlayer->Inventory_CountAllObjectContentsOfID(GetPrimaryAmmoID()) > 0) { if ( Clip1() < GetMaxClip1() ) { m_iClip1++; pPlayer->Inventory_UseItem(1,pPlayer->m_pInventory.FindFirstObject(GetPrimaryAmmoID())); } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFHunterRifle::Fire(CTFPlayer *pPlayer) { if ( m_flNextPrimaryAttack > gpGlobals->curtime ) return; // Check the ammo. if ( Clip1() <= 0 ) { HandleFireOnEmpty(); return; } // Fire the Hunter shot. PrimaryAttack(); if ( !IsZoomed() ) { // Prevent primary fire preventing zooms m_flNextSecondaryAttack = gpGlobals->curtime + SequenceDuration(); } m_flChargedSpread = TF_WEAPON_HUNTERRIFLE_SPREAD_MAX; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFWeaponBaseGun::PrimaryAttack( void ) { // Check for ammunition. if ( m_iClip1 <= 0 && m_iClip1 != -1 ) return; // Are we capable of firing again? if ( m_flNextPrimaryAttack > gpGlobals->curtime ) return; // Get the player owning the weapon. CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() ); if ( !pPlayer ) return; if ( !CanAttack() ) return; CalcIsAttackCritical(); #ifndef CLIENT_DLL pPlayer->RemoveInvisibility(); pPlayer->RemoveDisguise(); // Minigun has custom handling if ( GetWeaponID() != TF_WEAPON_MINIGUN ) { pPlayer->SpeakWeaponFire(); } CTF_GameStats.Event_PlayerFiredWeapon( pPlayer, IsCurrentAttackACrit() ); #endif // Set the weapon mode. m_iWeaponMode = TF_WEAPON_PRIMARY_MODE; SendWeaponAnim( ACT_VM_PRIMARYATTACK ); pPlayer->SetAnimation( PLAYER_ATTACK1 ); FireProjectile( pPlayer ); m_flLastFireTime = gpGlobals->curtime; // Set next attack times. m_flNextPrimaryAttack = gpGlobals->curtime + m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_flTimeFireDelay; // Don't push out secondary attack, because our secondary fire // systems are all separate from primary fire (sniper zooming, demoman pipebomb detonating, etc) //m_flNextSecondaryAttack = gpGlobals->curtime + m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_flTimeFireDelay; // Set the idle animation times based on the sequence duration, so that we play full fire animations // that last longer than the refire rate may allow. if ( Clip1() > 0 ) { SetWeaponIdleTime( gpGlobals->curtime + SequenceDuration() ); } else { SetWeaponIdleTime( gpGlobals->curtime + SequenceDuration() ); } // Check the reload mode and behave appropriately. if ( m_bReloadsSingly ) { m_iReloadMode.Set( TF_RELOAD_START ); } }