if (pThis->m_pBaseEngine->GetConfig()->GetCVar("antifalldamage_active")->GetBool())
{
CBaseEntity *pLocalEntity = pThis->m_pBaseEngine->GetLocalPlayer();
if (pLocalEntity != NULL &&
pLocalEntity->GetMoveType() != MOVETYPE_NOCLIP &&
pLocalEntity->GetMoveType() != MOVETYPE_LADDER &&
!(pLocalEntity->GetFlags() & FL_ONGROUND) &&
!(pLocalEntity->GetFlags() & FL_PARTIALGROUND))
{
CBaseUserCmd *pUserCmd = pThis->m_pHookHandler->GetUserCmd(sequence_number);
if (pUserCmd != NULL)
{
float fFallDamage = (float)((float)(pLocalEntity->GetFallVelocity() -580.0) * 0.23809524);
if (fFallDamage < 0.0f)
{
trace_t sTrace;
CTraceFilterSkipTwoEntities traceFilter(pLocalEntity->GetEntity(), NULL);
Vector vecAbsOrigin = pLocalEntity->GetAbsOrigin();
Vector vecPredictedAbsOrigin = pLocalEntity->Predict(); // account for next tick
pThis->m_pBaseEngine->EngineTrace->TraceRay(vecAbsOrigin, vecPredictedAbsOrigin, 0x4600400B, (ITraceFilter *)&TraceFilter, &sTrace);
if (sTrace.fraction != 1.0f)
*(DWORD *)pUserCmd->forwardmove() = NAN_VALUE;
}
}
}
}
