class CTriggerDetector : public CBaseTrigger { public: void Spawn ( void ); void Precache ( void ); void KeyValue ( KeyValueData *pkvd ); void EXPORT TouchDetect ( CBaseEntity *pOther ); private: int m_iTeam; bool m_PlayTone; char *m_cTone; float NextTone; }; LINK_ENTITY_TO_CLASS( trigger_detection, CTriggerDetector ); void CTriggerDetector::Spawn ( void ) { InitTrigger(); Precache(); NextTone = gpGlobals->time; if (m_PlayTone) SetTouch ( TouchDetect ); else SetTouch( MultiTouch ); } void CTriggerDetector::Precache ( void ) { if (m_PlayTone) PRECACHE_SOUND ( m_cTone ); } void CTriggerDetector::KeyValue ( KeyValueData *pkvd ) { if (FStrEq(pkvd->szKeyName, "team")) { m_iTeam = atoi(pkvd->szValue); pkvd->fHandled = TRUE; } else if (FStrEq(pkvd->szKeyName, "tone_sound")) { strcpy(m_cTone, pkvd->szValue); m_PlayTone = true; pkvd->fHandled = TRUE; } else CBaseTrigger::KeyValue ( pkvd ); } void CTriggerDetector::TouchDetect ( CBaseEntity *pOther ) { if (NextTone > gpGlobals->time) return; if (pOther && pOther->IsPlayer() && pOther->IsAlive() && ((pOther->pev->team == m_iTeam) || (m_iTeam == -1)) ) { EMIT_SOUND(edict(), CHAN_STATIC, m_cTone, 1.0, ATTN_NORM); NextTone = gpGlobals->time + 0.8; } }