//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CWeaponSpawner::MyTouch( CBasePlayer *pPlayer ) { bool bSuccess = false; CTFPlayer *pTFPlayer = ToTFPlayer( pPlayer ); if ( ValidTouch( pTFPlayer ) && pTFPlayer->IsPlayerClass( TF_CLASS_MERCENARY ) ) { #ifndef DM_WEAPON_BUCKET int iSlot = m_Item.GetStaticData()->GetLoadoutSlot( TF_CLASS_MERCENARY ); CTFWeaponBase *pWeapon = (CTFWeaponBase *)pTFPlayer->GetEntityForLoadoutSlot( iSlot ); if ( pWeapon ) { if ( pTFPlayer->ItemsMatch( pWeapon->GetItem(), &m_Item, pWeapon ) ) { if ( pTFPlayer->GiveAmmo( pWeapon->GetInitialAmmo(), pWeapon->GetPrimaryAmmoType(), true, TF_AMMO_SOURCE_AMMOPACK ) ) bSuccess = true; } else if ( !( pTFPlayer->m_nButtons & IN_ATTACK ) && ( pTFPlayer->m_nButtons & IN_USE || ( TFGameRules()->IsDeathmatch() && pWeapon->GetWeaponID() == TF_WEAPON_PISTOL ) ) ) // Check Use button, always replace pistol. { // Drop a usable weapon pTFPlayer->DropWeapon( pWeapon ); pWeapon->UnEquip( pTFPlayer ); pWeapon = NULL; } else { pTFPlayer->m_Shared.SetDesiredWeaponIndex( m_nItemID ); } } #else CTFWeaponBase *pWeapon = pTFPlayer->Weapon_OwnsThisID( m_nWeaponID ); const char *pszWeaponName = WeaponIdToClassname( m_nWeaponID ); if ( pWeapon ) { if ( pPlayer->GiveAmmo(999, m_pWeaponInfo->iAmmoType) ) bSuccess = true; } #endif if ( !pWeapon ) { const char *pszWeaponName = m_Item.GetEntityName(); CTFWeaponBase *pNewWeapon = (CTFWeaponBase *)pTFPlayer->GiveNamedItem( pszWeaponName, 0, &m_Item ); if ( pNewWeapon ) { pPlayer->SetAmmoCount( pNewWeapon->GetInitialAmmo(), pNewWeapon->GetPrimaryAmmoType() ); pNewWeapon->GiveTo( pPlayer ); pTFPlayer->m_Shared.SetDesiredWeaponIndex( -1 ); bSuccess = true; } } if ( bSuccess ) { CSingleUserRecipientFilter user( pPlayer ); user.MakeReliable(); UserMessageBegin( user, "ItemPickup" ); WRITE_STRING( GetClassname() ); MessageEnd(); pPlayer->EmitSound( "BaseCombatCharacter.AmmoPickup" ); } } return bSuccess; }