mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-01-30 08:34:27 +00:00
Teleport improvements
This commit is contained in:
parent
5616b6017d
commit
65871ac312
@ -1837,29 +1837,39 @@ void CBaseTrigger::TeleportTouch( CBaseEntity *pOther )
|
||||
entvars_t *pevToucher = pOther->pev;
|
||||
edict_t *pentTarget = NULL;
|
||||
|
||||
// Only teleport monsters or clients
|
||||
if( !FBitSet( pevToucher->flags, FL_CLIENT | FL_MONSTER ) )
|
||||
return;
|
||||
|
||||
if( !UTIL_IsMasterTriggered( m_sMaster, pOther ) )
|
||||
return;
|
||||
|
||||
if( !( pev->spawnflags & SF_TRIGGER_ALLOWMONSTERS ) )
|
||||
if( !(pev->spawnflags & SF_TRIGGER_TELEPORTALL) )
|
||||
{
|
||||
// no monsters allowed!
|
||||
if( FBitSet( pevToucher->flags, FL_MONSTER ) )
|
||||
{
|
||||
// Only teleport monsters or clients
|
||||
if( !FBitSet( pevToucher->flags, FL_CLIENT | FL_MONSTER ) )
|
||||
return;
|
||||
|
||||
if( !UTIL_IsMasterTriggered( m_sMaster, pOther ) )
|
||||
return;
|
||||
|
||||
if( !( pev->spawnflags & SF_TRIGGER_ALLOWMONSTERS ) )
|
||||
{
|
||||
// no monsters allowed!
|
||||
if( FBitSet( pevToucher->flags, FL_MONSTER ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if( ( pev->spawnflags & SF_TRIGGER_NOCLIENTS ) )
|
||||
{
|
||||
// no clients allowed
|
||||
if( pOther->IsPlayer() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( ( pev->spawnflags & SF_TRIGGER_NOCLIENTS ) )
|
||||
else
|
||||
{
|
||||
// no clients allowed
|
||||
if( pOther->IsPlayer() )
|
||||
{
|
||||
if( pOther->IsBSPModel() )
|
||||
return;
|
||||
if(pOther == this)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
pentTarget = FIND_ENTITY_BY_TARGETNAME( pentTarget, STRING( pev->target ) );
|
||||
@ -1878,8 +1888,10 @@ void CBaseTrigger::TeleportTouch( CBaseEntity *pOther )
|
||||
pevToucher->flags &= ~FL_ONGROUND;
|
||||
|
||||
UTIL_SetOrigin( pevToucher, tmp );
|
||||
|
||||
pevToucher->angles = pentTarget->v.angles;
|
||||
if( pev->spawnflags & SF_TRIGGER_PORTAL )
|
||||
pevToucher->angles = pevToucher->angles + pentTarget->v.angles;
|
||||
else
|
||||
pevToucher->angles = pentTarget->v.angles;
|
||||
|
||||
if( pOther->IsPlayer() )
|
||||
{
|
||||
@ -1887,7 +1899,8 @@ void CBaseTrigger::TeleportTouch( CBaseEntity *pOther )
|
||||
}
|
||||
|
||||
pevToucher->fixangle = TRUE;
|
||||
pevToucher->velocity = pevToucher->basevelocity = g_vecZero;
|
||||
if( !( pev->spawnflags & SF_TRIGGER_PORTAL ) )
|
||||
pevToucher->velocity = pevToucher->basevelocity = g_vecZero;
|
||||
}
|
||||
|
||||
class CTriggerTeleport : public CBaseTrigger
|
||||
|
@ -459,6 +459,8 @@ extern DLL_GLOBAL int g_Language;
|
||||
#define SF_TRIGGER_ALLOWMONSTERS 1// monsters allowed to fire this trigger
|
||||
#define SF_TRIGGER_NOCLIENTS 2// players not allowed to fire this trigger
|
||||
#define SF_TRIGGER_PUSHABLES 4// only pushables can fire this trigger
|
||||
#define SF_TRIGGER_PORTAL 8// apply angles relative
|
||||
#define SF_TRIGGER_TELEPORTALL 16// teleport all entities
|
||||
|
||||
// func breakable
|
||||
#define SF_BREAK_TRIGGER_ONLY 1// may only be broken by trigger
|
||||
|
Loading…
x
Reference in New Issue
Block a user