@@ -39,6 +39,7 @@ class CTriggerXenReturn : public CTriggerTeleport
3939public:
4040 void Spawn (void );
4141 void EXPORT TeleportTouch (CBaseEntity *pOther);
42+ CBaseEntity* GetEarthTarget (CBaseEntity* pOther);
4243};
4344
4445
@@ -55,7 +56,6 @@ void CTriggerXenReturn::Spawn(void)
5556void CTriggerXenReturn::TeleportTouch (CBaseEntity* pOther)
5657{
5758 entvars_t * pevToucher = pOther->pev ;
58- edict_t *pentTarget = NULL ;
5959
6060 // Only teleport monsters or clients
6161 if (!FBitSet (pevToucher->flags , FL_CLIENT | FL_MONSTER))
@@ -80,11 +80,11 @@ void CTriggerXenReturn::TeleportTouch(CBaseEntity* pOther)
8080 }
8181 }
8282
83- pentTarget = FIND_ENTITY_BY_CLASSNAME (pentTarget, " info_displacer_earth_target " );
84- if (FNullEnt (pentTarget) )
83+ CBaseEntity* pTarget = GetEarthTarget (pOther );
84+ if (!pTarget )
8585 return ;
8686
87- Vector tmp = VARS (pentTarget) ->origin ;
87+ Vector tmp = pTarget-> pev ->origin ;
8888
8989 if (pOther->IsPlayer ())
9090 {
@@ -97,11 +97,11 @@ void CTriggerXenReturn::TeleportTouch(CBaseEntity* pOther)
9797
9898 UTIL_SetOrigin (pevToucher, tmp);
9999
100- pevToucher->angles = pentTarget-> v . angles ;
100+ pevToucher->angles = pTarget-> pev -> angles ;
101101
102102 if (pOther->IsPlayer ())
103103 {
104- pevToucher->v_angle = pentTarget-> v . angles ;
104+ pevToucher->v_angle = pTarget-> pev -> angles ;
105105 }
106106
107107 pevToucher->fixangle = TRUE ;
@@ -121,6 +121,36 @@ void CTriggerXenReturn::TeleportTouch(CBaseEntity* pOther)
121121 EMIT_SOUND (ENT (pOther->pev ), CHAN_STATIC, " debris/beamstart7.wav" , 1 , ATTN_NORM );
122122}
123123
124+ CBaseEntity* CTriggerXenReturn::GetEarthTarget (CBaseEntity* pOther)
125+ {
126+ float flMinDist = 8192 ;
127+ CBaseEntity* pEarthTarget = NULL ;
128+ CBasePlayer* pPlayer = NULL ;
129+ if (pOther && pOther->IsPlayer ())
130+ {
131+ pPlayer = (CBasePlayer*)pOther;
132+ }
133+ CBaseEntity* pDestination = NULL ;
134+ while ((pDestination = UTIL_FindEntityByClassname (pDestination, " info_displacer_earth_target" )) != NULL )
135+ {
136+ if (pPlayer)
137+ {
138+ const float flDist = (pPlayer->m_DisplacerReturn - pDestination->pev ->origin ).Length ();
139+ if (flDist <= flMinDist)
140+ {
141+ pEarthTarget = pDestination;
142+ flMinDist = flDist;
143+ }
144+ }
145+ else
146+ {
147+ pEarthTarget = pDestination;
148+ break ;
149+ }
150+ }
151+ return pEarthTarget;
152+ }
153+
124154// =========================================================
125155// CTriggerGenewormHit
126156// =========================================================
0 commit comments