// // Causes the door to "do its thing", i.e. start moving, and cascade activation. // int CBaseDoor::DoorActivate() { if( !UTIL_IsMasterTriggered( m_sMaster, m_hActivator ) ) return 0; if( GetSpawnFlags().Any( SF_DOOR_NO_AUTO_RETURN ) && m_toggle_state == TS_AT_TOP ) {// door should close DoorGoDown(); } else {// door should open if( m_hActivator != NULL && m_hActivator->IsPlayer() ) { // give health if player opened the door (medikit) m_hActivator->GiveHealth( m_bHealthValue, DMG_GENERIC ); } // play door unlock sounds PlayLockSounds( this, &m_ls, false, false ); DoorGoUp(); } return 1; }
void CBaseButton::ButtonTouch(CBaseEntity *pOther) { if (!FClassnameIs(pOther->pev, "player")) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if (code == BUTTON_NOTHING) return; if (!UTIL_IsMasterTriggered(m_sMaster, pOther)) { PlayLockSounds(pev, &m_ls, TRUE, TRUE); return; } SetTouch(NULL); if (code == BUTTON_RETURN) { EMIT_SOUND(ENT(pev), CHAN_VOICE, STRING(pev->noise), VOL_NORM, ATTN_NORM); SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); ButtonReturn(); } else ButtonActivate(); }
void CItem::ItemTouch( CBaseEntity *pOther ) { //removed this limitation for monsters if ( !pOther->IsPlayer() ) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; if (!UTIL_IsMasterTriggered(m_sMaster, pPlayer)) return; if (pPlayer->pev->deadflag != DEAD_NO) return; if (AddItem( pPlayer ) != -1 ) { UTIL_FireTargets( pev->target, pOther, this, USE_TOGGLE ); SetTouch( NULL ); if( IsItem() && gmsg.ItemPickup ) { //show icon for item MESSAGE_BEGIN( MSG_ONE, gmsg.ItemPickup, NULL, pPlayer->pev ); WRITE_STRING( STRING(pev->classname) ); MESSAGE_END(); } // play pickup sound EMIT_SOUND( pPlayer->edict(), CHAN_ITEM, (char *)PickSound(), 1, ATTN_NORM ); // tell the owner item was taken if (!FNullEnt( pev->owner )) pev->owner->v.impulse = 0; // enable respawn in multiplayer if ( g_pGameRules->IsMultiplayer() && !FBitSet( pev->spawnflags, SF_NORESPAWN )) Respawn(); else UTIL_Remove( this ); } else if ( gEvilImpulse101 ) UTIL_Remove( this ); }
void CBasePlayerAmmo :: DefaultTouch( CBaseEntity *pOther ) { if ( !pOther->IsPlayer() ) { return; } if (!UTIL_IsMasterTriggered(m_sMaster, m_pPlayer)) // return ; // AJH allows for locked weapons if (AddAmmo( pOther )) { if ( g_pGameRules->AmmoShouldRespawn( this ) == GR_AMMO_RESPAWN_YES ) { Respawn(); } else { SetTouch( NULL ); SetThink(&CBasePlayerAmmo ::SUB_Remove); SetNextThink( 0.1 ); } SUB_UseTargets( pOther, USE_TOGGLE, 0 ); //AJH now ammo can trigger stuff too } else if (gEvilImpulse101) { // evil impulse 101 hack, kill always SetTouch( NULL ); SetThink(&CBasePlayerAmmo ::SUB_Remove); SetNextThink( 0.1 ); } }
/* <6a319> ../cstrike/dlls/doors.cpp:554 */ int CBaseDoor::DoorActivate(void) { if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) return 0; // door should close if ((pev->spawnflags & SF_DOOR_NO_AUTO_RETURN) && m_toggle_state == TS_AT_TOP) { DoorGoDown(); } else // door should open { // give health if player opened the door (medikit) if (m_hActivator != NULL && m_hActivator->IsPlayer()) { // VARS(m_eoActivator)->health += m_bHealthValue; m_hActivator->TakeHealth(m_bHealthValue, DMG_GENERIC); } // play door unlock sounds PlayLockSounds(pev, &m_ls, FALSE, FALSE); DoorGoUp(); } return 1; }
/* <6a3b8> ../cstrike/dlls/doors.cpp:508 */ void CBaseDoor::DoorTouch(CBaseEntity *pOther) { entvars_t *pevToucher = pOther->pev; // Ignore touches by dead players if (pevToucher->deadflag != DEAD_NO) return; // If door has master, and it's not ready to trigger, // play 'locked' sound if (!FStringNull(m_sMaster) && !UTIL_IsMasterTriggered(m_sMaster, pOther)) { PlayLockSounds(pev, &m_ls, TRUE, FALSE); } // If door is somebody's target, then touching does nothing. // You have to activate the owner (e.g. button). if (!FStringNull(pev->targetname)) { // play locked sound PlayLockSounds(pev, &m_ls, TRUE, FALSE); return; } // remember who activated the door m_hActivator = pOther; if (DoorActivate()) { // Temporarily disable the touch function, until movement is finished. SetTouch(NULL); } }
/* <27047> ../cstrike/dlls/buttons.cpp:628 */ void CBaseButton::ButtonTouch(CBaseEntity *pOther) { // Ignore touches by anything but players if (!FClassnameIs(pOther->pev, "player")) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if (code == BUTTON_NOTHING) return; if (!UTIL_IsMasterTriggered(m_sMaster, pOther)) { // play button locked sound PlayLockSounds(pev, &m_ls, TRUE, TRUE); return; } // Temporarily disable the touch function, until movement is finished. SetTouch(NULL); if (code == BUTTON_RETURN) { EMIT_SOUND(ENT(pev), CHAN_VOICE, (char *)STRING(pev->noise), VOL_NORM, ATTN_NORM); SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); ButtonReturn(); } else // code == BUTTON_ACTIVATE { ButtonActivate(); } }
void CBaseButton::TriggerAndWait(void) { ASSERT(m_toggle_state == TS_GOING_UP); if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) return; m_toggle_state = TS_AT_TOP; if (m_fStayPushed || FBitSet(pev->spawnflags, SF_BUTTON_TOGGLE)) { if (!FBitSet(pev->spawnflags, SF_BUTTON_TOUCH_ONLY)) SetTouch(NULL); else SetTouch(&CBaseButton::ButtonTouch); } else { pev->nextthink = pev->ltime + m_flWait; SetThink(&CBaseButton::ButtonReturn); } pev->frame = 1; SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); }
/* <27843> ../cstrike/dlls/buttons.cpp:664 */ void CBaseButton::ButtonActivate() { EMIT_SOUND(ENT(pev), CHAN_VOICE, (char *)STRING(pev->noise), VOL_NORM, ATTN_NORM); if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) { // button is locked, play locked sound PlayLockSounds(pev, &m_ls, TRUE, TRUE); return; } else { // button is unlocked, play unlocked sound PlayLockSounds(pev, &m_ls, FALSE, TRUE); } assert(m_toggle_state == TS_AT_BOTTOM); m_toggle_state = TS_GOING_UP; SetMoveDone(&CBaseButton::TriggerAndWait); if (!m_fRotating) { LinearMove(m_vecPosition2, pev->speed); } else { AngularMove(m_vecAngle2, pev->speed); } }
// // Doors not tied to anything (e.g. button, another door) can be touched, to make them activate. // void CBaseDoor::DoorTouch( CBaseEntity *pOther ) { // Ignore touches by anything but players if( !pOther->IsPlayer() ) return; // If door has master, and it's not ready to trigger, // play 'locked' sound if( m_sMaster && !UTIL_IsMasterTriggered( m_sMaster, pOther ) ) PlayLockSounds( this, &m_ls, true, false ); // If door is somebody's target, then touching does nothing. // You have to activate the owner (e.g. button). if( HasTargetname() ) { // play locked sound PlayLockSounds( this, &m_ls, true, false ); return; } m_hActivator = pOther;// remember who activated the door if( DoorActivate() ) SetTouch( NULL ); // Temporarily disable the touch function, until movement is finished. }
STATE CBaseDMStart::GetState( CBaseEntity *pEntity ) { if (UTIL_IsMasterTriggered( pev->netname, pEntity )) return STATE_ON; else return STATE_OFF; }
/* <263dd> ../cstrike/dlls/buttons.cpp:693 */ void CBaseButton::TriggerAndWait() { assert(m_toggle_state == TS_GOING_UP); if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) return; m_toggle_state = TS_AT_TOP; // If button automatically comes back out, start it moving out. // Else re-instate touch method if (m_fStayPushed || (pev->spawnflags & SF_BUTTON_TOGGLE)) { // this button only works if USED, not touched! if (!(pev->spawnflags & SF_BUTTON_TOUCH_ONLY)) { // ALL buttons are now use only SetTouch(NULL); } else SetTouch(&CBaseButton::ButtonTouch); } else { pev->nextthink = pev->ltime + m_flWait; SetThink(&CBaseButton::ButtonReturn); } // use alternate textures pev->frame = 1; SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); }
BOOL CFuncTank :: StartControl( CBasePlayer *pController ) { if ( m_pController != NULL ) return FALSE; // Team only or disabled? if ( m_iszMaster ) { if ( !UTIL_IsMasterTriggered( m_iszMaster, pController ) ) return FALSE; } ALERT( at_console, "using TANK!\n"); m_pController = pController; if ( m_pController->m_pActiveItem ) { m_pController->m_pActiveItem->Holster(); m_pController->pev->weaponmodel = 0; m_pController->pev->viewmodel = 0; } m_pController->m_iHideHUD |= HIDEHUD_WEAPONS; m_vecControllerUsePos = m_pController->pev->origin; pev->nextthink = pev->ltime + 0.1; return TRUE; }
bool CBaseToggle :: IsLockedByMaster( void ) { if (m_sMaster && !UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) return true; else return false; }
bool CBaseDMStart::IsTriggered( CBaseEntity *pEntity ) { // BOOL master = UTIL_IsMasterTriggered( pev->netname, pEntity ); bool master = !!(UTIL_IsMasterTriggered( pev->netname, pEntity )); return master; }
// // Doors not tied to anything (e.g. button, another door) can be touched, to make them activate. // void CBaseDoor::DoorTouch( CBaseEntity *pOther ) { entvars_t* pevToucher = pOther->pev; // Ignore touches by anything but players if (!FClassnameIs(pevToucher, "player")) return; // If door has master, and it's not ready to trigger, // play 'locked' sound if (m_sMaster && !UTIL_IsMasterTriggered(m_sMaster, pOther)) PlayLockSounds(pev, &m_ls, TRUE, FALSE); // If door is somebody's target, then touching does nothing. // You have to activate the owner (e.g. button). //LRC- allow flags to override this if (!FStringNull(pev->targetname) && !FBitSet(pev->spawnflags,SF_DOOR_FORCETOUCHABLE)) { // play locked sound PlayLockSounds(pev, &m_ls, TRUE, FALSE); return; } m_hActivator = pOther;// remember who activated the door if (DoorActivate( )) SetTouch( NULL ); // Temporarily disable the touch function, until movement is finished. }
BOOL CBaseToggle :: IsLockedByMaster( void ) { if (m_sMaster && !UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) return TRUE; else return FALSE; }
bool CRuleEntity::CanFireForActivator( CBaseEntity *pActivator ) const { if ( m_iszMaster ) { return UTIL_IsMasterTriggered( m_iszMaster, pActivator ); } return true; }
bool CRuleEntity::CanFireForActivator( CBaseEntity *pActivator ) { if ( m_iszMaster != NULL_STRING ) { if ( UTIL_IsMasterTriggered( m_iszMaster, pActivator ) ) return true; else return false; } return true; }
BOOL CRuleEntity::CanFireForActivator(CBaseEntity *pActivator) { if (m_iszMaster) { if (UTIL_IsMasterTriggered(m_iszMaster, pActivator)) return TRUE; else return FALSE; } return TRUE; }
//----------------------------------------------------------------------------- // Purpose: Doors not tied to anything (e.g. button, another door) can be touched, // to make them activate. // Input : *pOther - //----------------------------------------------------------------------------- void CBaseDoor::DoorTouch( CBaseEntity *pOther ) { if( m_ChainTarget != NULL_STRING ) ChainTouch( pOther ); // Ignore touches by anything but players. if ( !pOther->IsPlayer() ) { #ifdef HL1_DLL if( PassesBlockTouchFilter( pOther ) && m_toggle_state == TS_GOING_DOWN ) { DoorGoUp(); } #endif return; } // If door is not opened by touch, do nothing. if ( !HasSpawnFlags(SF_DOOR_PTOUCH) ) { #ifdef HL1_DLL if( m_toggle_state == TS_AT_BOTTOM ) { PlayLockSounds(this, &m_ls, TRUE, FALSE); } #endif//HL1_DLL return; } // If door has master, and it's not ready to trigger, // play 'locked' sound. if (m_sMaster != NULL_STRING && !UTIL_IsMasterTriggered(m_sMaster, pOther)) { PlayLockSounds(this, &m_ls, TRUE, FALSE); } if (m_bLocked) { m_OnLockedUse.FireOutput( pOther, pOther ); PlayLockSounds(this, &m_ls, TRUE, FALSE); return; } // Remember who activated the door. m_hActivator = pOther; if (DoorActivate( )) { // Temporarily disable the touch function, until movement is finished. SetTouch( NULL ); } }
// CALLED THROUGH the newly-touched weapon's instance. The existing player weapon is pOriginal int CBasePlayerWeapon::AddDuplicate( CBasePlayerItem *pOriginal ) { if (!UTIL_IsMasterTriggered(m_sMaster, m_pPlayer)) // return FALSE; // AJH allows for locked weapons if ( m_iDefaultAmmo ) { return ExtractAmmo( (CBasePlayerWeapon *)pOriginal ); } else { // a dead player dropped this. return ExtractClipAmmo( (CBasePlayerWeapon *)pOriginal ); } }
//----------------------------------------------------------------------------- // Purpose: Touch function that activates the button if it responds to touch. // Input : pOther - The entity that touched us. //----------------------------------------------------------------------------- void CBaseButton::ButtonTouch( CBaseEntity *pOther ) { // Ignore touches by anything but players if ( !pOther->IsPlayer() ) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if ( code == BUTTON_NOTHING ) return; if (!UTIL_IsMasterTriggered(m_sMaster, pOther) || m_bLocked) { // play button locked sound PlayLockSounds(this, &m_ls, TRUE, TRUE); return; } // Temporarily disable the touch function, until movement is finished. SetTouch( NULL ); if ( code == BUTTON_RETURN ) { if ( m_sNoise != NULL_STRING ) { CPASAttenuationFilter filter( this ); EmitSound_t ep; ep.m_nChannel = CHAN_VOICE; ep.m_pSoundName = (char*)STRING(m_sNoise); ep.m_flVolume = 1; ep.m_SoundLevel = SNDLVL_NORM; EmitSound( filter, entindex(), ep ); } m_OnPressed.FireOutput(m_hActivator, this); ButtonReturn(); } else { // code == BUTTON_ACTIVATE m_OnPressed.FireOutput(m_hActivator, this); ButtonActivate( ); } }
// // Used by SUB_UseTargets, when a door is the target of a button. // void CBaseDoor::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { m_hActivator = pActivator; if (!UTIL_IsMasterTriggered(m_sMaster, pActivator)) return; if (m_iSpeedMode==1){ //AJH for changing door speeds pev->speed+=m_fAcceleration; DoorActivate(); ALERT(at_debug, "speed increased by %f and is now %f\n", m_fAcceleration,pev->speed); } else{ if (m_iOnOffMode) { if (useType == USE_ON) { if (m_toggle_state == TS_AT_BOTTOM) { PlayLockSounds(pev, &m_ls, FALSE, FALSE); DoorGoUp(); } return; } else if (useType == USE_OFF) { if (m_toggle_state == TS_AT_TOP) { DoorGoDown(); } return; } } // if not ready to be used, ignore "use" command. if (m_toggle_state == TS_AT_TOP) { if (!FBitSet(pev->spawnflags, SF_DOOR_NO_AUTO_RETURN)) return; } else if (m_toggle_state != TS_AT_BOTTOM) return; DoorActivate(); } }
/* <18b5f6> ../cstrike/dlls/training_gamerules.cpp:424 */ void CFuncWeaponCheck::__MAKE_VHOOK(Touch)(CBaseEntity *pOther) { if (!UTIL_IsMasterTriggered(sMaster, pOther)) return; if (!pOther) return; if (!pOther->IsPlayer()) return; CBasePlayer *pPlayer = (CBasePlayer *)pOther; for (int i = 1; i <= iItemCount; ++i) { if (iAnyWeapon) { if (pPlayer->HasNamedPlayerItem(STRING(sItemName[i]))) { break; } } else { if (!pPlayer->HasNamedPlayerItem(STRING(sItemName[i]))) { if (pev->dmgtime < gpGlobals->time) { if (pev->speed > -1.0f) { FireTargets(STRING(sTriggerNoItems), pOther, pOther, USE_TOGGLE, 0); pev->dmgtime = pev->speed + gpGlobals->time; if (!pev->speed) pev->speed = -1; } } return; } } } FireTargets(STRING(sTriggerWithItems), pOther, pOther, USE_TOGGLE, 0); SUB_Remove(); }
// // Doors not tied to anything (e.g. button, another door) can be touched, to make them activate. // void CBaseDoor::DoorTouch( CBaseEntity *pOther ) { entvars_t* pevToucher = pOther->pev; //EDIT: si estamos tocando la puerta, mandar mensaje y terminar funcion /* if ( FBitSet ( pev->spawnflags, SF_DOOR_USE_ONLY ) )//si tiene flag "solo uso" { if ( pOther->IsPlayer())//si el que la toca es un jugador { if (FStringNull(pev->targetname))//si tiene vacio el campo de "nombre" { ClientPrint(pOther->pev, HUD_PRINTCENTER, "#PressUseForOpen"); //digamos al cliente que presione E SERVER_COMMAND("neardoor 1\n"); return;//terminar } } } */ // Ignore touches by anything but players if (!FClassnameIs(pevToucher, "player")) return; // If door has master, and it's not ready to trigger, // play 'locked' sound if (m_sMaster && !UTIL_IsMasterTriggered(m_sMaster, pOther)) PlayLockSounds(pev, &m_ls, TRUE, FALSE); // If door is somebody's target, then touching does nothing. // You have to activate the owner (e.g. button). if (!FStringNull(pev->targetname)) { // play locked sound PlayLockSounds(pev, &m_ls, TRUE, FALSE); return; } m_hActivator = pOther;// remember who activated the door if (DoorActivate( )) SetTouch( NULL ); // Temporarily disable the touch function, until movement is finished. }
//----------------------------------------------------------------------------- // Purpose: Button has reached the "pressed/top" position. Fire its OnIn output, // and pause before returning to "unpressed/bottom". //----------------------------------------------------------------------------- void CBaseButton::TriggerAndWait( void ) { ASSERT(m_toggle_state == TS_GOING_UP); if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator) || m_bLocked) { return; } m_toggle_state = TS_AT_TOP; // // Re-instate touches if the button is of the toggle variety. // if (m_fStayPushed || HasSpawnFlags(SF_BUTTON_TOGGLE ) ) { if (HasSpawnFlags(SF_BUTTON_TOUCH_ACTIVATES)) { SetTouch(&CBaseButton::ButtonTouch); } else { // BUGBUG: ALL buttons no longer respond to touch SetTouch (NULL); } } // // If button automatically comes back out, start it moving out. // else { SetNextThink( gpGlobals->curtime + m_flWait ); SetThink( &CBaseButton::ButtonReturn ); } m_nState = 1; // use alternate textures m_OnIn.FireOutput(m_hActivator, this); }
void CBaseButton::ButtonActivate(void) { EMIT_SOUND(ENT(pev), CHAN_VOICE, STRING(pev->noise), VOL_NORM, ATTN_NORM); if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) { PlayLockSounds(pev, &m_ls, TRUE, TRUE); return; } else PlayLockSounds(pev, &m_ls, FALSE, TRUE); ASSERT(m_toggle_state == TS_AT_BOTTOM); m_toggle_state = TS_GOING_UP; SetMoveDone(&CBaseButton::TriggerAndWait); if (!m_fRotating) LinearMove(m_vecPosition2, pev->speed); else AngularMove(m_vecAngle2, pev->speed); }
int CBasePlayerWeapon::AddToPlayer( CBasePlayer *pPlayer ) { if (!UTIL_IsMasterTriggered(m_sMaster, pPlayer)) // return FALSE; // AJH allows for locked weapons int bResult = CBasePlayerItem::AddToPlayer( pPlayer ); pPlayer->pev->weapons |= (1<<m_iId); if ( !m_iPrimaryAmmoType ) { m_iPrimaryAmmoType = pPlayer->GetAmmoIndex( pszAmmo1() ); m_iSecondaryAmmoType = pPlayer->GetAmmoIndex( pszAmmo2() ); } if (bResult) { return AddWeapon( ); } return FALSE; }
// // Causes the door to "do its thing", i.e. start moving, and cascade activation. // int CBaseDoor::DoorActivate( ) { if ( CHalfLifeRules *rules = dynamic_cast<CHalfLifeRules *>( g_pGameRules ) ) { if ( rules->EntityShouldBePrevented( edict() ) ) { return 0; } } if (!UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) return 0; if (FBitSet(pev->spawnflags, SF_DOOR_NO_AUTO_RETURN) && m_toggle_state == TS_AT_TOP) {// door should close DoorGoDown(); } else {// door should open if ( m_hActivator != NULL && m_hActivator->IsPlayer() ) {// give health if player opened the door (medikit) // VARS( m_eoActivator )->health += m_bHealthValue; m_hActivator->TakeHealth( m_bHealthValue, DMG_GENERIC ); } // play door unlock sounds PlayLockSounds(pev, &m_ls, FALSE, FALSE); DoorGoUp(); } if ( CHalfLifeRules *singlePlayerRules = dynamic_cast< CHalfLifeRules * >( g_pGameRules ) ) { singlePlayerRules->HookModelIndex( this->edict() ); } return 1; }