If still actual, I used to use box bounding check:
PHP Code:
#include <sdktools>
public void OnPluginStart()
{
RegAdminCmd("sm_stuck", CmdCheckStuck, ADMFLAG_ROOT, "Checks if client stuck");
}
public Action CmdCheckStuck(int client, int args)
{
PrintToChat(client, "Stuck? %b", IsClientStuck(client));
return Plugin_Handled;
}
stock bool IsClientStuck(int iClient, float vOrigin[3] = {0.0, 0.0, 0.0})
{
static float vMin[3], vMax[3];
static Handle hTrace;
static bool bHit;
bHit = false;
GetClientMins(iClient, vMin);
GetClientMaxs(iClient, vMax);
if( vOrigin[0] == 0.0 && vOrigin[1] == 0.0 && vOrigin[2] == 0.0 )
{
GetClientAbsOrigin(iClient, vOrigin);
}
hTrace = TR_TraceHullFilterEx(vOrigin, vOrigin, vMin, vMax, MASK_PLAYERSOLID, TraceRayNoPlayers, iClient);
if (hTrace != INVALID_HANDLE) {
bHit = TR_DidHit(hTrace);
CloseHandle(hTrace);
}
return bHit;
}
public bool TraceRayNoPlayers(int entity, int mask, any data)
{
if(entity == data || (entity >= 1 && entity <= MaxClients))
{
return false;
}
return true;
}
__________________