//----------------------------------------------------------------------------- // Purpose: // Input : pOther - //----------------------------------------------------------------------------- void CItem::ItemTouch( CBaseEntity *pOther ) { // Vehicles can touch items + pick them up if ( pOther->GetServerVehicle() ) { pOther = pOther->GetServerVehicle()->GetPassenger(); if ( !pOther ) return; } // if it's not a player, ignore if ( !pOther->IsPlayer() ) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; // Must be a valid pickup scenario (no blocking). Though this is a more expensive // check than some that follow, this has to be first Obecause it's the only one // that inhibits firing the output OnCacheInteraction. if ( ItemCanBeTouchedByPlayer( pPlayer ) == false ) return; m_OnCacheInteraction.FireOutput(pOther, this); // Can I even pick stuff up? if ( !pPlayer->IsAllowedToPickupWeapons() ) return; // ok, a player is touching this item, but can he have it? if ( !g_pGameRules->CanHaveItem( pPlayer, this ) ) { // no? Ignore the touch. return; } if ( MyTouch( pPlayer ) ) { m_OnPlayerTouch.FireOutput(pOther, this); SetTouch( NULL ); SetThink( NULL ); // player grabbed the item. g_pGameRules->PlayerGotItem( pPlayer, this ); if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_YES ) { Respawn(); } else { UTIL_Remove( this ); } } else if (gEvilImpulse101) { UTIL_Remove( this ); } }
//----------------------------------------------------------------------------- // Purpose: // Input : pOther - //----------------------------------------------------------------------------- void CItem::ItemTouch( CBaseEntity *pOther ) { // Vehicles can touch items + pick them up if ( pOther->GetServerVehicle() ) { pOther = pOther->GetServerVehicle()->GetPassenger(); if ( !pOther ) return; } // if it's not a player, ignore if ( !pOther->IsPlayer() ) return; // Can I even pick stuff up? if ( pOther->IsEFlagSet( EFL_NO_WEAPON_PICKUP ) ) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; // ok, a player is touching this item, but can he have it? if ( !g_pGameRules->CanHaveItem( pPlayer, this ) ) { // no? Ignore the touch. return; } // Must be a valid pickup scenario (no blocking) if ( ItemCanBeTouchedByPlayer( pPlayer ) == false ) return; if ( MyTouch( pPlayer ) ) { m_OnPlayerTouch.FireOutput(pOther, this); SetTouch( NULL ); SetThink( NULL ); // player grabbed the item. g_pGameRules->PlayerGotItem( pPlayer, this ); if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_YES ) { Respawn(); } else { UTIL_Remove( this ); #ifdef HL2MP HL2MPRules()->RemoveLevelDesignerPlacedObject( this ); #endif } } else if (gEvilImpulse101) { UTIL_Remove( this ); } }
//----------------------------------------------------------------------------- // Purpose: // Input : pOther - //----------------------------------------------------------------------------- void CCompanionCube::ItemTouch( CBaseEntity *pOther ) { Msg ("Item touch!"); // if it's not a player, ignore if ( !pOther->IsPlayer() ) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; // Must be a valid pickup scenario (no blocking). Though this is a more expensive // check than some that follow, this has to be first Obecause it's the only one // that inhibits firing the output OnCacheInteraction. if ( ItemCanBeTouchedByPlayer( pPlayer ) == false ) return; //m_OnCacheInteraction.FireOutput(pOther, this); // Can I even pick stuff up? if ( !pPlayer->IsAllowedToPickupWeapons() ) return; // ok, a player is touching this item, but can he have it? if ( !g_pGameRules->CanHaveItem( pPlayer, this ) ) { // no? Ignore the touch. return; } if ( MyTouch( pPlayer ) ) { // m_OnPlayerTouch.FireOutput(pOther, this); SetTouch( NULL ); SetThink( NULL ); // player grabbed the item. g_pGameRules->PlayerGotItem( pPlayer, this ); } /* else if (gEvilImpulse101) { UTIL_Remove( this ); }*/ }