How can you calculate players movement sync with SP?
Its pretty simple with SourcePawn
Code: Select all
#include <sourcemod>
#include <sdktools>
float g_fOldAngle[MAXPLAYERS+1];
int gi_TotalTicks[MAXPLAYERS+1];
int gi_SyncedTicks[MAXPLAYERS+1];
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seed, mouse[2])
{
//Getting the angle differnce
new Float:fAngleDiff = angles[1] - g_fOldAngle[client];
//fixing the angle differnce to positive value
if (fAngleDiff > 180)
{
fAngleDiff -= 360;
}
else if (fAngleDiff < -180)
{
fAngleDiff += 360;
}
//Checking for mouse movement
if(fAngleDiff > 0) //mouse moving left
{
gi_TotalTicks[client]++;
if(buttons & IN_MOVELEFT) //if player pressing A
{
gi_SyncedTicks[client]++;
}
}
else if(fAngleDiff < 0) //mouse moving right
{
gi_TotalTicks[client]++;
if(buttons & IN_MOVERIGHT) //if player pressing D
{
gi_SyncedTicks[client]++;
}
}
}
public float CalcSync(client)
{
//avoiding throwing error: cannot divide 0
if(gi_TotalTicks[client] > 0)
{
return (float(gi_SyncedTicks[client]) / gi_TotalTicks[client])*100.0;
}
else
{
return 0.0;
}
}