void CGETKnife::PickupTouch( CBaseEntity *pOther ) { // Vehicles can touch items + pick them up if ( pOther->GetServerVehicle() ) { pOther = pOther->GetServerVehicle()->GetPassenger(); if ( !pOther ) return; } CBaseCombatCharacter *pPicker = pOther->MyCombatCharacterPointer(); if ( !pPicker ) return; // Must be a valid pickup scenario (no blocking). Though this is a more expensive // check than some that follow, this has to be first because it's the only one // that inhibits firing the output OnCacheInteraction. if ( UTIL_ItemCanBeTouchedByPlayer( this, ToGEPlayer(pPicker) ) == false ) return; // Can I even pick stuff up? if ( !pPicker->IsAllowedToPickupWeapons() ) return; if ( MyTouch( pPicker ) ) { SetTouch( NULL ); SetThink( NULL ); UTIL_Remove( this ); } }
//----------------------------------------------------------------------------- // Purpose: Override so give correct ammo // Input : pOther - the entity that touched me // Output : //----------------------------------------------------------------------------- void CWeapon_SLAM::SlamTouch( CBaseEntity *pOther ) { CBaseCombatCharacter* pBCC = ToBaseCombatCharacter( pOther ); // Can I even pick stuff up? if ( pBCC && !pBCC->IsAllowedToPickupWeapons() ) return; // --------------------------------------------------- // First give weapon to touching entity if allowed // --------------------------------------------------- BaseClass::DefaultTouch(pOther); // ---------------------------------------------------- // Give slam ammo if touching client // ---------------------------------------------------- if (pOther->GetFlags() & FL_CLIENT) { // ------------------------------------------------ // If already owned weapon of this type remove me // ------------------------------------------------ CWeapon_SLAM* oldWeapon = (CWeapon_SLAM*)pBCC->Weapon_OwnsThisType( GetClassname() ); if (oldWeapon != this) { UTIL_Remove( this ); } else { pBCC->GiveAmmo( 1, m_iSecondaryAmmoType ); SetThink(NULL); } } }
void CWeaponMine::MineTouch( CBaseEntity *pOther ) { #ifdef GAME_DLL CBaseCombatCharacter* pBCC = ToBaseCombatCharacter( pOther ); if ( pBCC && !pBCC->IsAllowedToPickupWeapons() ) return; #endif BaseClass::DefaultTouch(pOther); }
//----------------------------------------------------------------------------- // Purpose: Override so give correct ammo // Input : pOther - the entity that touched me // Output : //----------------------------------------------------------------------------- void CWeapon_SLAM::SlamTouch( CBaseEntity *pOther ) { #ifdef GAME_DLL CBaseCombatCharacter* pBCC = ToBaseCombatCharacter( pOther ); // Can I even pick stuff up? if ( pBCC && !pBCC->IsAllowedToPickupWeapons() ) return; #endif // --------------------------------------------------- // First give weapon to touching entity if allowed // --------------------------------------------------- BaseClass::DefaultTouch(pOther); }
//----------------------------------------------------------------------------- // Drops all weapons, marks the character as not being able to pick up weapons //----------------------------------------------------------------------------- void CTriggerWeaponStrip::StartTouch(CBaseEntity *pOther) { BaseClass::StartTouch( pOther ); if ( PassesTriggerFilters(pOther) == false ) return; CBaseCombatCharacter *pCharacter = pOther->MyCombatCharacterPointer(); if ( m_bKillWeapons ) { for ( int i = 0 ; i < pCharacter->WeaponCount(); ++i ) { CBaseCombatWeapon *pWeapon = pCharacter->GetWeapon( i ); if ( !pWeapon ) continue; pCharacter->Weapon_Drop( pWeapon ); UTIL_Remove( pWeapon ); } return; } // Strip the player of his weapons if ( pCharacter && pCharacter->IsAllowedToPickupWeapons() ) { CBaseCombatWeapon *pBugbait = pCharacter->Weapon_OwnsThisType( "weapon_bugbait" ); if ( pBugbait ) { pCharacter->Weapon_Drop( pBugbait ); UTIL_Remove( pBugbait ); } pCharacter->Weapon_DropAll( true ); pCharacter->SetPreventWeaponPickup( true ); } }