Fixing trigger gravity: Difference between revisions
Jump to navigation
Jump to search
(Blanked the page) |
No edit summary |
||
Line 1: | Line 1: | ||
=== {{warning|This fix doesn't appear to work 100% of the time, use at your own risk.}} === | |||
Currently the [[Trigger_gravity|trigger_gravity]] brush entity doesn't actually function properly. | |||
To fix gravity triggers, navigate to triggers.cpp, around line 2651 you should find this: | |||
<syntaxhighlight lang="cpp"> | |||
class CTriggerGravity : public CBaseTrigger | |||
{ | |||
public: | |||
DECLARE_CLASS( CTriggerGravity, CBaseTrigger ); | |||
DECLARE_DATADESC(); | |||
void Spawn( void ); | |||
void GravityTouch( CBaseEntity *pOther ); | |||
}; | |||
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity ); | |||
BEGIN_DATADESC( CTriggerGravity ) | |||
// Function Pointers | |||
DEFINE_FUNCTION(GravityTouch), | |||
END_DATADESC() | |||
void CTriggerGravity::Spawn( void ) | |||
{ | |||
BaseClass::Spawn(); | |||
InitTrigger(); | |||
SetTouch( &CTriggerGravity::GravityTouch ); | |||
} | |||
void CTriggerGravity::GravityTouch( CBaseEntity *pOther ) | |||
{ | |||
// Only save on clients | |||
if ( !pOther->IsPlayer() ) | |||
return; | |||
pOther->SetGravity( GetGravity() ); | |||
} | |||
</syntaxhighlight> | |||
replace the whole class, functions and all with this: | |||
<syntaxhighlight lang="cpp"> | |||
class CTriggerGravity : public CTriggerMultiple | |||
{ | |||
public: | |||
DECLARE_CLASS(CTriggerGravity, CTriggerMultiple); | |||
DECLARE_DATADESC(); | |||
void Spawn( void ); | |||
void StartTouch(CBaseEntity *pOther); | |||
void EndTouch(CBaseEntity *pOther); | |||
}; | |||
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity ); | |||
BEGIN_DATADESC( CTriggerGravity ) | |||
// Function Pointers | |||
DEFINE_FUNCTION(StartTouch), | |||
DEFINE_FUNCTION(EndTouch), | |||
END_DATADESC() | |||
void CTriggerGravity::Spawn( void ) | |||
{ | |||
BaseClass::Spawn(); | |||
InitTrigger(); | |||
//SetTouch( &CTriggerGravity::GravityTouch ); | |||
} | |||
void CTriggerGravity::StartTouch( CBaseEntity *pOther ) | |||
{ | |||
// Only save on clients | |||
//if ( !pOther->IsPlayer() ) | |||
// return; | |||
pOther->SetGravity( GetGravity() ); | |||
} | |||
void CTriggerGravity::EndTouch(CBaseEntity *pOther) | |||
{ | |||
// Only save on clients | |||
//if ( !pOther->IsPlayer() ) | |||
// return; | |||
pOther->SetGravity(1); | |||
} | |||
</syntaxhighlight> | |||
[[Trigger_gravity|trigger_gravity]] should work fine now on players, but still won't change a physics object's gravity. |
Revision as of 05:33, 6 January 2018
Warning:This fix doesn't appear to work 100% of the time, use at your own risk.

Currently the trigger_gravity brush entity doesn't actually function properly.
To fix gravity triggers, navigate to triggers.cpp, around line 2651 you should find this:
class CTriggerGravity : public CBaseTrigger
{
public:
DECLARE_CLASS( CTriggerGravity, CBaseTrigger );
DECLARE_DATADESC();
void Spawn( void );
void GravityTouch( CBaseEntity *pOther );
};
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity );
BEGIN_DATADESC( CTriggerGravity )
// Function Pointers
DEFINE_FUNCTION(GravityTouch),
END_DATADESC()
void CTriggerGravity::Spawn( void )
{
BaseClass::Spawn();
InitTrigger();
SetTouch( &CTriggerGravity::GravityTouch );
}
void CTriggerGravity::GravityTouch( CBaseEntity *pOther )
{
// Only save on clients
if ( !pOther->IsPlayer() )
return;
pOther->SetGravity( GetGravity() );
}
replace the whole class, functions and all with this:
class CTriggerGravity : public CTriggerMultiple
{
public:
DECLARE_CLASS(CTriggerGravity, CTriggerMultiple);
DECLARE_DATADESC();
void Spawn( void );
void StartTouch(CBaseEntity *pOther);
void EndTouch(CBaseEntity *pOther);
};
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity );
BEGIN_DATADESC( CTriggerGravity )
// Function Pointers
DEFINE_FUNCTION(StartTouch),
DEFINE_FUNCTION(EndTouch),
END_DATADESC()
void CTriggerGravity::Spawn( void )
{
BaseClass::Spawn();
InitTrigger();
//SetTouch( &CTriggerGravity::GravityTouch );
}
void CTriggerGravity::StartTouch( CBaseEntity *pOther )
{
// Only save on clients
//if ( !pOther->IsPlayer() )
// return;
pOther->SetGravity( GetGravity() );
}
void CTriggerGravity::EndTouch(CBaseEntity *pOther)
{
// Only save on clients
//if ( !pOther->IsPlayer() )
// return;
pOther->SetGravity(1);
}
trigger_gravity should work fine now on players, but still won't change a physics object's gravity.