//----------------------------------------------------------------------------- // Purpose: Touch function that calls the virtual touch function //----------------------------------------------------------------------------- void CQuakeItem::ItemTouch( CBaseEntity *pOther ) { // if it's not a player, ignore if ( !pOther->IsPlayer() ) return; //Dead? if (pOther->pev->health <= 0) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; // Call the virtual touch function if ( MyTouch( pPlayer ) ) { SUB_UseTargets( pOther, USE_TOGGLE, 0 ); // Respawn if it's not DM==2 if (gpGlobals->deathmatch != 2) { Respawn( m_flRespawnTime ); } else { UTIL_Remove( this ); } } }
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: Touch function that calls the virtual touch function //----------------------------------------------------------------------------- void CItem::ItemTouch( CBaseEntity *pOther ) { // if it's not a player, ignore if ( !pOther->IsPlayer() ) { 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; } if (MyTouch( pPlayer )) { SUB_UseTargets( pOther, USE_TOGGLE, 0 ); SetTouch( NULL ); // player grabbed the item. g_pGameRules->PlayerGotItem( pPlayer, this ); if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_YES ) { Respawn(m_flRespawnTime); } else { 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; 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 ); }*/ }
void CItem::ItemTouch(CBaseEntity *pOther) { if (!pOther->IsPlayer()) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; if (!g_pGameRules->CanHaveItem(pPlayer, this)) return; if (MyTouch(pPlayer)) { SUB_UseTargets(pOther, USE_TOGGLE, 0); SetTouch(NULL); 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); }