#if defined _ljstats_included
#endinput
#endif
#define _ljstats_included
#pragma semicolon 1
#define FL_ONGROUND2 (FL_ONGROUND|FL_PARTIALGROUND)
stock CalculateLandOrigin(bool:ducking, Float:gravity,
Float:current_origin[3], Float:frame_origin[2][3],
Float:frame_velocity[2][3], Float:land_origin[3])
{
static Float:airtime;
static Float:distancex, Float:distancey;
airtime = FloatDiv(((SquareRoot(Pow(frame_velocity[0][2], 2.0) +
(2 * gravity * (frame_origin[0][2] - current_origin[2]))) * -1) -
frame_velocity[1][2]), (gravity * -1));
frame_velocity[1][0] = FloatAbs(frame_velocity[1][0]);
frame_velocity[1][1] = FloatAbs(frame_velocity[1][1]);
distancex = airtime * frame_velocity[1][0];
distancey = airtime * frame_velocity[1][1];
if (frame_origin[1][0] < current_origin[0]) land_origin[0] =
frame_origin[1][0] + distancex;
else land_origin[0] =
frame_origin[1][0] - distancex;
if (frame_origin[1][1] < current_origin[1]) land_origin[1] =
frame_origin[1][1] + distancey;
else land_origin[1] =
frame_origin[1][1] - distancey;
if (ducking) current_origin[2] += 17.0;
land_origin[2] = current_origin[2];
}
stock Float:AngleBetweenVectors(Float:vector1[3], Float:vector2[3])
{
new Float:v1[3], Float:v2[3];
for (new i=0; i < 3; i++)
{
v1[i] = vector1[i];
}
for (new i=0; i < 3; i++)
{
v2[i] = vector2[i];
}
v1[2] = v2[2] = 0.0;
new Float:lengths = GetVectorLength(v1) * GetVectorLength(v2);
if( lengths == 0.0 )
{
lengths = 1.0;
}
return RadToDeg(ArcCosine(GetVectorDotProduct(v1, v2) /
lengths));
}
stock bool:IsDucking(client)
{
new Float:abs_min[3], Float:abs_max[3];
GetClientMaxs(client, abs_max);
GetClientMins(client, abs_min);
return ((abs_min[2] + 64.0) < abs_max[2]);
}
stock GetDirection(client)
{
new Float:angles[3], Float:fwdA[3];
GetClientAbsAngles(client, angles);
GetAngleVectors(angles, fwdA, NULL_VECTOR, NULL_VECTOR);
fwdA[2] = 0.0;
NormalizeVector(fwdA, fwdA);
ScaleVector(fwdA, 250.0);
new Float:velocity[3];
GetEntPropVector(client, Prop_Data, "m_vecVelocity", velocity);
new Float:angle = AngleBetweenVectors(fwdA, velocity);
if( 45.5 <= angle < 120.0 )
{
return 1;
}
else if( 134.5 <= angle <= 180.0 )
{
return 2;
}
return 0;
}
stock bool:IsUserOnGround(client)
{
return !!(GetEntityFlags(client) & FL_ONGROUND2);
}