mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-01-30 16:44:29 +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;
|
entvars_t *pevToucher = pOther->pev;
|
||||||
edict_t *pentTarget = NULL;
|
edict_t *pentTarget = NULL;
|
||||||
|
|
||||||
// Only teleport monsters or clients
|
if( !(pev->spawnflags & SF_TRIGGER_TELEPORTALL) )
|
||||||
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!
|
// Only teleport monsters or clients
|
||||||
if( FBitSet( pevToucher->flags, FL_MONSTER ) )
|
if( !FBitSet( pevToucher->flags, FL_CLIENT | FL_MONSTER ) )
|
||||||
{
|
|
||||||
return;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if( ( pev->spawnflags & SF_TRIGGER_NOCLIENTS ) )
|
|
||||||
{
|
{
|
||||||
// no clients allowed
|
if( pOther->IsBSPModel() )
|
||||||
if( pOther->IsPlayer() )
|
return;
|
||||||
{
|
if(pOther == this)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pentTarget = FIND_ENTITY_BY_TARGETNAME( pentTarget, STRING( pev->target ) );
|
pentTarget = FIND_ENTITY_BY_TARGETNAME( pentTarget, STRING( pev->target ) );
|
||||||
@ -1878,8 +1888,10 @@ void CBaseTrigger::TeleportTouch( CBaseEntity *pOther )
|
|||||||
pevToucher->flags &= ~FL_ONGROUND;
|
pevToucher->flags &= ~FL_ONGROUND;
|
||||||
|
|
||||||
UTIL_SetOrigin( pevToucher, tmp );
|
UTIL_SetOrigin( pevToucher, tmp );
|
||||||
|
if( pev->spawnflags & SF_TRIGGER_PORTAL )
|
||||||
pevToucher->angles = pentTarget->v.angles;
|
pevToucher->angles = pevToucher->angles + pentTarget->v.angles;
|
||||||
|
else
|
||||||
|
pevToucher->angles = pentTarget->v.angles;
|
||||||
|
|
||||||
if( pOther->IsPlayer() )
|
if( pOther->IsPlayer() )
|
||||||
{
|
{
|
||||||
@ -1887,7 +1899,8 @@ void CBaseTrigger::TeleportTouch( CBaseEntity *pOther )
|
|||||||
}
|
}
|
||||||
|
|
||||||
pevToucher->fixangle = TRUE;
|
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
|
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_ALLOWMONSTERS 1// monsters allowed to fire this trigger
|
||||||
#define SF_TRIGGER_NOCLIENTS 2// players not 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_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
|
// func breakable
|
||||||
#define SF_BREAK_TRIGGER_ONLY 1// may only be broken by trigger
|
#define SF_BREAK_TRIGGER_ONLY 1// may only be broken by trigger
|
||||||
|
Loading…
x
Reference in New Issue
Block a user