Skip to content

Commit 4dad799

Browse files
committed
Merge branch 'opfor' into opforfixed
2 parents f02215c + 3bf4876 commit 4dad799

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

dlls/gearbox/displacer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ void CDisplacer::Teleport( void )
572572
if( pTarget )
573573
tmp = pTarget->pev->origin;
574574

575-
if( pTarget && /*HACK*/( tmp != Vector( 0, 0, 0 )/*HACK*/ ) )
575+
if( pTarget )
576576
{
577577
if( (m_pPlayer->m_afPhysicsFlags & PFLAG_ONROPE) )
578578
m_pPlayer->LetGoRope();
@@ -592,6 +592,7 @@ void CDisplacer::Teleport( void )
592592
tmp.z+=37;
593593

594594
m_pPlayer->pev->flags &= ~FL_ONGROUND;
595+
m_pPlayer->m_DisplacerReturn = m_pPlayer->pev->origin;
595596

596597
UTIL_SetOrigin(m_pPlayer->pev, tmp);
597598

dlls/gearbox/gearbox_triggers.cpp

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class CTriggerXenReturn : public CTriggerTeleport
3939
public:
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)
5556
void 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
//=========================================================

dlls/player.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ TYPEDESCRIPTION CBasePlayer::m_playerSaveData[] =
120120
DEFINE_FIELD( CBasePlayer, m_iFOV, FIELD_INTEGER ),
121121

122122
DEFINE_FIELD(CBasePlayer, m_fInXen, FIELD_BOOLEAN),
123+
DEFINE_FIELD(CBasePlayer, m_DisplacerReturn, FIELD_VECTOR),
123124
DEFINE_FIELD(CBasePlayer, m_pRope, FIELD_CLASSPTR),
124125

125126
//DEFINE_FIELD( CBasePlayer, m_fDeadTime, FIELD_FLOAT ), // only used in multiplayer games

dlls/player.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ class CBasePlayer : public CBaseMonster
341341
// Op4 player attributes.
342342
//
343343
BOOL m_fInXen;
344+
Vector m_DisplacerReturn;
344345

345346
friend class CDisplacer;
346347
friend class CTriggerXenReturn;

0 commit comments

Comments
 (0)