Главая идея плагина в борьбе с некорректными cl_sidespeed, cl_forwardspeed и cl_backspeed значениями. Использование нестандартных значений этих команд дает преимущество (в скорости перемещения), когда при делении cl_side на cl_forward(back) получаемый коэффициент не равен 1. Данную защиту можно реализовать двумя способами:
1) циклическая проверка кваров напрямую с помощью svc_sendcvarvalue или svc_sendcvarvalue2 (query_client_cvar), через некоторое время
2) получение значений передвижения каждый фрейм и обработка этих значений
Там и там есть плюсы и минусы, но пойдем по второму пути
Использование этого пути осложняется тем, что команда +speed (хотьба) реализованна в клиенте (а не через UC_Buttons как +duck итп) и тем самым меняет UC_ForwardMove и UC_SideMove на заведомо непредсказуемые значения, так как сам игрок может менять скорость хотьбы при помощи cl_movespeedkey
Так же во время изменения клавиш, движок ставит не точные значения (0 или maxspeed), а в зависимости от того как мы нажимали кнопки, те за 1 фрейм мы можем нажать кнопку и отжать ее, при этом будут внесены изменения в параметры движения (в данном случае с коэффициентом 0,25)... (а вобще в данном случае надо смотреть CL_KeyState итп в input.cpp)
Может я что-то упускаю, но по исходникам получается, что изменение UC_ForwardMove и UC_SideMove должно стабилизироваться довольно быстро...
Стабилизирование выражается в коэффициенте 1 при делении их друг на друга... Но проблема в том, что при нормальных установках, есть моменты когда UC_ForwardMove и UC_SideMove при делении не дают 1 и при этом их значения несколько фреймов подряд остаются неизменными...
Code
оснавная часть: "cl_side %f %f %f cheat",(UC_SideMove/UC_ForwardMove), UC_SideMove, UC_ForwardMove
L 09/11/2009 - 21:56:19: [FpsSideCheck.amxx] Cheat: "HaMMa<1368><><>" cl_side 0.497757 111.000000 223.000000 cheat "VALVE_ID_LAN"
L 09/11/2009 - 22:09:49: [FpsSideCheck.amxx] Cheat: "secas<1411><><>" cl_side 0.500000 116.000000 232.000000 cheat "VALVE_ID_LAN"
L 09/11/2009 - 22:14:28: [FpsSideCheck.amxx] Cheat: "San'ek<1424><><>" cl_side 0.497757 111.000000 223.000000 cheat "VALVE_ID_LAN"
L 09/11/2009 - 22:14:29: [FpsSideCheck.amxx] Cheat: "LEON ' L1stik<1430><><>" cl_side 0.497757 111.000000 223.000000 cheat "VALVE_ID_LAN"
L 09/11/2009 - 22:23:09: [FpsSideCheck.amxx] Cheat: "LeDJJ-hns#stake!<1432><><>" cl_side 3.000000 6.000000 2.000000 cheat "VALVE_ID_LAN"
Вообщето в этих логах заведомо неизвестно, нет ли значений читерных, но "cl_side 0.497757 111.000000 223.000000" не является читерным точно. А "cl_side 3.000000 6.000000 2.000000" вообще неизвестно как получить... Проблема - разобраться откуда получаются такие значения, тк если можно специально такое повторять, то это даст нечитерное преимущество при прыгании лонгДжампов, и сделать фильтр в плагине, чтобы на эти значения плагин не обращал внимания...
Плагин текущей версии прикладываю... А вообще такие "некорректные" значения довольно редко проскакивают... (поэтому и проблематично установить их причину)
ЗЫ плагин одновременно еще "палит" fps_max без блокирования developer режима (коим я пользуюсь), через клиентский fps (а не серверный), но я думаю проблем не будет в исходниках отделить одно от другого