//----------------------------------------------------------------------------- // Purpose: Switches to the given weapon (providing it has ammo) // Input : // Output : true is switch succeeded //----------------------------------------------------------------------------- bool CBaseCombatCharacter::Weapon_Switch( CBaseCombatWeapon *pWeapon, int viewmodelindex /*=0*/ ) { if ( pWeapon == NULL ) return false; // Already have it out? if ( m_hActiveWeapon.Get() == pWeapon ) { if ( !m_hActiveWeapon->IsWeaponVisible() || m_hActiveWeapon->IsHolstered() ) return m_hActiveWeapon->Deploy( ); return false; } if (!Weapon_CanSwitchTo(pWeapon)) { return false; } if ( m_hActiveWeapon ) { if ( !m_hActiveWeapon->Holster( pWeapon ) ) return false; } m_hActiveWeapon = pWeapon; return pWeapon->Deploy( ); }
//----------------------------------------------------------------------------- // Purpose: Switches to the given weapon (providing it has ammo) // Input : // Output : true is switch suceeded //----------------------------------------------------------------------------- bool CBaseCombatCharacter::Weapon_Switch( CBaseCombatWeapon *pWeapon, int viewmodelindex /*=0*/ ) { if ( pWeapon == NULL ) return false; // Already have it out? if ( m_hActiveWeapon.Get() == pWeapon ) { if ( !m_hActiveWeapon->IsWeaponVisible() ) return m_hActiveWeapon->Deploy( ); return false; } if (!Weapon_CanSwitchTo(pWeapon)) { return false; } if ( m_hActiveWeapon ) { if ( !m_hActiveWeapon->Holster( pWeapon ) ) return false; } //BG2 - Tjoppen - TODO: if in the future we want holster/draw animations to play correctly, delay the following two // lines until the holster animation has finished. that should work. m_hActiveWeapon = pWeapon; return pWeapon->Deploy( ); }
//----------------------------------------------------------------------------- // Purpose: Player reacts to bumping a weapon. // Input : pWeapon - the weapon that the player bumped into. // Output : Returns true if player picked up the weapon //----------------------------------------------------------------------------- bool CSDKPlayer::BumpWeapon( CBaseCombatWeapon *pWeapon ) { CBaseCombatCharacter *pOwner = pWeapon->GetOwner(); // Can I have this weapon type? if ( !IsAllowedToPickupWeapons() ) return false; if ( pOwner || !Weapon_CanUse( pWeapon ) || !g_pGameRules->CanHavePlayerItem( this, pWeapon ) ) { if ( gEvilImpulse101 ) { UTIL_Remove( pWeapon ); } return false; } // Don't let the player fetch weapons through walls (use MASK_SOLID so that you can't pickup through windows) if( !pWeapon->FVisible( this, MASK_SOLID ) && !(GetFlags() & FL_NOTARGET) ) { return false; } // ---------------------------------------- // If I already have it just take the ammo // ---------------------------------------- if (Weapon_OwnsThisType( pWeapon->GetClassname(), pWeapon->GetSubType())) { //Only remove the weapon if we attained ammo from it if ( Weapon_EquipAmmoOnly( pWeapon ) == false ) return false; // Only remove me if I have no ammo left // Can't just check HasAnyAmmo because if I don't use clips, I want to be removed, if ( pWeapon->UsesClipsForAmmo1() && pWeapon->HasPrimaryAmmo() ) return false; UTIL_Remove( pWeapon ); return false; } // ------------------------- // Otherwise take the weapon // ------------------------- else { //Make sure we're not trying to take a new weapon type we already have if ( Weapon_SlotOccupied( pWeapon ) ) { CBaseCombatWeapon *pActiveWeapon = Weapon_GetSlot( WEAPON_PRIMARY_SLOT ); if ( pActiveWeapon != NULL && pActiveWeapon->HasAnyAmmo() == false && Weapon_CanSwitchTo( pWeapon ) ) { Weapon_Equip( pWeapon ); return true; } //Attempt to take ammo if this is the gun we're holding already if ( Weapon_OwnsThisType( pWeapon->GetClassname(), pWeapon->GetSubType() ) ) { Weapon_EquipAmmoOnly( pWeapon ); } return false; } } pWeapon->CheckRespawn(); Weapon_Equip( pWeapon ); return true; }