Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Важная информация

Перед тем как создать тему или задать вопрос, ознакомьтесь с данной темой, там собраны наиболее распространенные уязвимости и способы устранения.
Так же не поленитесь воспользоваться поиском, вполне возможно, что ваш вопрос уже поднимался на форуме.
При создании новой темы уделите внимание ее названию, оно должно кратко описывать суть вашего вопроса/проблемы. Все вновь созданные темы с названиями "Помогите", "Объясните", "Подскажите" и т.д. будут удалены, а их авторы наказаны.
4 страниц V   1 2 3 »

SpeedHack, SlowMo, BhopHack, StrafeHack Detector

Статус пользователя Mistrick
сообщение 30.12.2013, 23:29
Сообщение #1


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Не банит. Выдает сообщение в чат, если превышает число варнингов. При нормальной работе допишу наказание.
SH Detector
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "SpeedHack Detector"
#define VERSION "0.12"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_WARN_TIME 5.0
#define MAX_SLOW_WARN 7
#define MAX_SPEED_WARN 7

new bool:g_bAlive[33], g_iFPS[33], g_iFrame[33], g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33], g_iMaxPlayers;
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Pre", 0);
RegisterHam(Ham_Killed, "player", "Ham_Player_Alive", 1);
RegisterHam(Ham_Spawn, "player", "Ham_Player_Alive", 1);
set_task(1.0, "CheckFps", _, _, _, "b");
g_iMaxPlayers = get_maxplayers();
}
public client_disconnect(id)
{
g_bAlive[id] = false;
}
public Ham_Player_Alive(id)
{
g_bAlive[id] = bool:is_user_alive(id);
}
public FM_PlayerPostThink_Pre(id)
{
if(!g_bAlive[id]) return FMRES_IGNORED;

g_iFrame[id] += 1;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!g_bAlive[id]) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
for(new id = 1; id <= g_iMaxPlayers; id++)
{
if(!g_bAlive[id])
{
g_iFrame[id] = 0;
continue;
}
g_iFPS[id] = g_iFrame[id];
g_iFrame[id] = 0;
CheckHack(id);
}
}
public CheckHack(id)
{
static iMsecFPS, offset, offset2, Float:fOrigin[3];
static Float:fTime; fTime = get_gametime();

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) return;

if(g_iMsec[id])
{
iMsecFPS = floatround(1000.0/g_iMsec[id]);
}
else
{
iMsecFPS = 2000;
}

//console_print(0, "id:%d, FPS: %d, Msec: %d => FPS: %d, TimeFPS: %d", id, g_iFPS[id], g_iMsec[id], iMsecFPS, g_iTimeFPS[id]);

switch(iMsecFPS)
{
case 1000:{ offset = 360; offset2 = 360; }
case 500:{ offset = 180; offset2 = 360; }
case 333:{ offset = 95; offset2 = 180; }
case 250:{ offset = 60; offset2 = 95; }
default:{ offset = 50; offset2 = 50; }
}

if(iMsecFPS > g_iFPS[id] + offset)
{
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= MAX_WARN_TIME)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(iMsecFPS + offset2 < g_iFPS[id])
{
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= MAX_WARN_TIME)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= MAX_SLOW_WARN)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= MAX_SPEED_WARN)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
public Punish(id, type[])
{
new szName[32]; get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
}
equal_array(Float:a[3], Float:b[3])
{
return (floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001);
}

BhopHack Detector
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "BhopHack Detector"
#define VERSION "0.3"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_WARN 5
#define MAX_WARN_TIME 10.0

new g_iJumpCount[33], g_iJumpButtonFrame[33], g_iOnGroundFrame[33], g_iBhopWarn[33], bool:g_bAlive[33], Float:g_fWarnTime[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Pre", 0);
RegisterHam(Ham_Killed, "player", "Ham_Player_Alive", 1);
RegisterHam(Ham_Spawn, "player", "Ham_Player_Alive", 1);
}
public client_disconnect(id)
{
g_bAlive[id] = false;
}
public Ham_Player_Alive(id)
{
g_bAlive[id] = bool:is_user_alive(id);
}
public FM_PlayerPreThink_Pre(id)
{
if(!g_bAlive[id]) return FMRES_IGNORED;

new iButtons; iButtons = pev(id, pev_button);
new iOldButton; iOldButton = pev(id, pev_oldbuttons);

if(iButtons & IN_JUMP)
{
g_iJumpButtonFrame[id]++;
}
if(iButtons & IN_JUMP && !(iOldButton & IN_JUMP))
{
g_iJumpCount[id]++;
}

new bool:bOnGround; bOnGround = bool:(pev(id, pev_flags) & FL_ONGROUND);

if(bOnGround)
{
g_iOnGroundFrame[id] += 1;
}
else if(g_iOnGroundFrame[id])
{
//client_print(id, print_console, "OnGroundFrame is %d, JumpCount is %d; AvgFrame: %d", g_iOnGroundFrame[id], g_iJumpCount[id], g_iJumpButtonFrame[id] / g_iJumpCount[id]);

if(g_iJumpCount[id] && g_iOnGroundFrame[id] <= 3 && (g_iJumpCount[id] < 5 || g_iJumpCount[id] > 16)
&& g_iJumpButtonFrame[id] / g_iJumpCount[id] < 5)
{
new Float:fTime = get_gametime();
if(g_iBhopWarn[id] && fTime - g_fWarnTime[id] > MAX_WARN_TIME)
{
g_iBhopWarn[id] = 0;
}
g_fWarnTime[id] = fTime;

if(++g_iBhopWarn[id] >= MAX_WARN)
{
Punish(id, "Type 3");
g_iBhopWarn[id] = 0;
}
}

g_iOnGroundFrame[id] = 0;
g_iJumpCount[id] = 0;
g_iJumpButtonFrame[id] = 0;
}

return FMRES_IGNORED;
}
public Punish(id, type[])
{
new szName[32]; get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
}

StrafeHack Detector
Обнаруживает и блокирует стрейф эмуляторы, скрипты(через +left, +right). Наказания нет, только вывод в чат и кик.
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "StrafeHack Detector"
#define VERSION "0.1"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define LEFT 1
#define RIGHT 2

#define MAX_WARNING_MOVE 5
#define MAX_WARNING_ANGLE 5
#define MAX_STRAFES 16

new bool:g_bAlive[33], g_iWarningMove[33], g_iWarningAngle[33], g_iMaxPlayers;
new bool:g_bTurningLeft[33], bool:g_bTurningRight[33], Float:g_fOldAngles[33], g_iOldTurning[33], g_iStrafes[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
RegisterHam(Ham_Killed, "player", "Ham_Player_Alive", 1);
RegisterHam(Ham_Spawn, "player", "Ham_Player_Alive", 1);
set_task(0.2, "Task_CheckAngles", 6846587, .flags = "b");
g_iMaxPlayers = get_maxplayers();
}
public client_putinserver(id)
{
g_iWarningMove[id] = 0;
g_iWarningAngle[id] = 0;
}
public client_disconnect(id)
{
g_bAlive[id] = false;
}
public Ham_Player_Alive(id)
{
g_bAlive[id] = bool:is_user_alive(id);
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

//***** Strafe Script Blocker *****//
new Float:fVelocity[3], iButtons = get_uc(uc_handle, UC_Buttons);

if(iButtons & IN_LEFT || iButtons & IN_RIGHT)
{
pev(id, pev_velocity, fVelocity);
fVelocity[0] *= 0.3;
fVelocity[1] *= 0.3;
set_pev(id, pev_velocity, fVelocity);
}
//***** Move Detector *****//
new Float:fForwardMove; get_uc(uc_handle, UC_ForwardMove, fForwardMove);
new Float:fSideMove; get_uc(uc_handle, UC_SideMove, fSideMove);
new Float:fValue = floatsqroot(fForwardMove * fForwardMove + fSideMove * fSideMove);

if(fValue > 250.0)
{
new Float:fMaxSpeed; pev(id, pev_maxspeed, fMaxSpeed);
if(fValue > fMaxSpeed)
{
pev(id, pev_velocity, fVelocity);
fVelocity[0] *= 0.3;
fVelocity[1] *= 0.3;
set_pev(id, pev_velocity, fVelocity);

if(++g_iWarningMove[id] >= MAX_WARNING_MOVE)
{
g_iWarningMove[id] = 0;
Punish(id, "Type 4-1");
}
}
}
//***** Angle Detector *****//
new Float:fAngles[3]; pev(id, pev_angles, fAngles);

g_bTurningRight[id] = false;
g_bTurningLeft[id] = false;

if(fAngles[1] < g_fOldAngles[id])
{
g_bTurningRight[id] = true;
if(g_iOldTurning[id] == LEFT) g_iStrafes[id]++;
}
else if(fAngles[1] > g_fOldAngles[id])
{
g_bTurningLeft[id] = true;
if(g_iOldTurning[id] == RIGHT) g_iStrafes[id]++;
}

g_fOldAngles[id] = fAngles[1];

if(g_bTurningRight[id]) g_iOldTurning[id] = RIGHT;
else if(g_bTurningLeft[id]) g_iOldTurning[id] = LEFT;

return FMRES_IGNORED;
}
public Task_CheckAngles()
{
new Float:fVelocity[3];

for(new id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id))
{
g_iStrafes[id] = 0;
continue;
}

if(g_iStrafes[id] >= MAX_STRAFES)
{
pev(id, pev_velocity, fVelocity);
fVelocity[0] *= 0.3;
fVelocity[1] *= 0.3;
set_pev(id, pev_velocity, fVelocity);

if(++g_iWarningAngle[id] >= MAX_WARNING_ANGLE)
{
g_iWarningAngle[id] = 0;
Punish(id, "Type 4-2");
}
}
g_iStrafes[id] = 0;
}
}
public Punish(id, type[])
{
new szName[32]; get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
server_cmd("kick #%d %s", get_user_userid(id), type);
}



Отредактировал: Mistrick94, - 15.4.2014, 13:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 15 раз
   Цитировать сообщение
Статус пользователя neverminde
сообщение 30.12.2013, 23:32
Сообщение #2


Стаж: 15 лет

Сообщений: 1133
Благодарностей: 595
Полезность: 576

т.е. если у меня просел фпс, на меня тоже варны пойдут? Не комильфо
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя apTmusic
сообщение 30.12.2013, 23:32
Сообщение #3


Стаж: 14 лет

Сообщений: 419
Благодарностей: 126
Полезность: 232

Попробуй закинуть на сервер, где по классам можно прокачивать скорость, посмотрим что будет :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 30.12.2013, 23:36
Сообщение #4


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Цитата(neverminde @ 31.12.2013, 4:32) *
т.е. если у меня просел фпс, на меня тоже варны пойдут? Не комильфо

От простого проседания фпс ничего не будет. Максимум получишь пару варингов, но если их меньше 5, то ничего не будет. Уверенность в использовании чита, только при выводе сообщения в чат.
Цитата(apTmusic @ 31.12.2013, 4:32) *
Попробуй закинуть на сервер, где по классам можно прокачивать скорость, посмотрим что будет :)

Плагин не проверяет скорость игрока, это не должно влиять.

Отредактировал: Mistrick94, - 30.12.2013, 23:37
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя neverminde
сообщение 30.12.2013, 23:58
Сообщение #5


Стаж: 15 лет

Сообщений: 1133
Благодарностей: 595
Полезность: 576

Цитата(Mistrick94 @ 31.12.2013, 0:36) *
От простого проседания фпс ничего не будет. Максимум получишь пару варингов, но если их меньше 5, то ничего не будет. Уверенность в использовании чита, только при выводе сообщения в чат.

Плагин не проверяет скорость игрока, это не должно влиять.

тип 2 протестил, правильно определяет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя neverminde
сообщение 31.12.2013, 0:48
Сообщение #6


Стаж: 15 лет

Сообщений: 1133
Благодарностей: 595
Полезность: 576

хотя не совсем.
Начал тестить другой плагин, с тех пор несколько раз ребутнул кс, а slowmo каждый раз нужно включать через инжектор, значит он тут непричем.
Стоял на одном месте. Пока у меня было свернутое окно начали идти варны

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 31.12.2013, 1:02
Сообщение #7


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Поправил оффсеты. На счет сворачивания хз, сам сворачиваю и без варнингов. Если был включен сх при сворачивании, то на него мог. Попробуй включить лог на 53 строке.
Скрытый текст
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.2"
#define AUTHOR "Mistrick"

#pragma semicolon 1

new g_iFPS[33];
new g_iMsec[33];
new Float:g_fWarnSlowTime[33];
new Float:g_fWarnSpeedTime[33];
new g_iWarnSlow[33];
new g_iWarnSpeed[33];
new g_pWarnMaxSlow, g_pWarnMaxSpeed;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_pWarnMaxSlow = register_cvar("hack_slowwarn", "5");
g_pWarnMaxSpeed = register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Pre", 0);
set_task(1.0, "CheckFps", 967854, _, _, "b");
}
public FM_PlayerPreThink_Pre(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iFPS[id] += 1;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, offset2, Float:fTime;
fTime = get_gametime();
for(id = 1; id < 33; id++)
{
if(!is_user_alive(id)) continue;

iMsecFPS = floatround(1000.0/g_iMsec[id]);

//console_print(0, "id:%d, FPS: %d, Msec: %d => FPS: %d,", id, g_iFPS[id], g_iMsec[id], iMsecFPS);

switch(iMsecFPS)
{
case 1000:
{
offset = 250;
offset2 = 250;
}
case 500:
{
offset = 170;
offset2 = 120;
}
case 333:
{
offset = 70;
offset2 = 100;
}
case 250:
{
offset = 40;
offset2 = 60;
}
case 200, 167:
{
offset = 35;
offset2 = 40;
}
case 143, 125:
{
offset = 15;
offset2 = 20;
}
case 100, 43, 45, 48:
{
offset = 10;
offset2 = 15;
}
default:
{
offset = 10;
offset2 = 10;
}
}

if(g_iFPS[id] + offset < iMsecFPS)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= 5.0)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(g_iFPS[id] > iMsecFPS + offset2)
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= 5.0)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= get_pcvar_num(g_pWarnMaxSlow))
{
g_iWarnSlow[id] = 0;
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[Type 1]", szName);
}
if(g_iWarnSpeed[id] >= get_pcvar_num(g_pWarnMaxSpeed))
{
g_iWarnSpeed[id] = 0;
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[Type 2]", szName);
}
g_iFPS[id] = 0;
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя neverminde
сообщение 31.12.2013, 1:28
Сообщение #8


Стаж: 15 лет

Сообщений: 1133
Благодарностей: 595
Полезность: 576

На старой версии с логом.
imgs






В новой версии такого не происходит, но зато обнаружил другу вещь.
Сервер в локальной сети роутера. ( Нашёл незапароленный wifi :D )
Вдруг у меня всёриваются пакеты из-за потери связи с роутером
imgs





Инет появлется, разворачваю окно, там несколько варнов
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 31.12.2013, 1:51
Сообщение #9


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Обновил оффсеты и добавил проверку на координаты игрока. Вроде не должен выдавать варн при потере коннекта.
...
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.3"
#define AUTHOR "Mistrick"

#pragma semicolon 1

new g_iFPS[33];
new g_iMsec[33];
new Float:g_fWarnSlowTime[33];
new Float:g_fWarnSpeedTime[33];
new g_iWarnSlow[33];
new g_iWarnSpeed[33];
new g_pWarnMaxSlow, g_pWarnMaxSpeed;
new Float:g_fOrigin[33][3];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
g_pWarnMaxSlow = register_cvar("hack_slowwarn", "5");
g_pWarnMaxSpeed = register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Pre", 0);
set_task(1.0, "CheckFps", 967854, _, _, "b");
}
public FM_PlayerPreThink_Pre(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iFPS[id] += 1;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, offset2, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id < 33; id++)
{
if(!is_user_alive(id)) continue;

iMsecFPS = floatround(1000.0/g_iMsec[id]);

//console_print(0, "id:%d, FPS: %d, Msec: %d => FPS: %d,", id, g_iFPS[id], g_iMsec[id], iMsecFPS);

switch(iMsecFPS)
{
case 1000:
{
offset = 350;
offset2 = 350;
}
case 500:
{
offset = 170;
offset2 = 120;
}
case 333:
{
offset = 70;
offset2 = 100;
}
case 250:
{
offset = 40;
offset2 = 60;
}
case 200, 167:
{
offset = 35;
offset2 = 40;
}
case 143, 125:
{
offset = 20;
offset2 = 25;
}
case 100, 71, 67, 63, 59, 43, 45, 48:
{
offset = 10;
offset2 = 15;
}
default:
{
offset = 10;
offset2 = 10;
}
}

pev(id, pev_origin, fOrigin);

if(g_iFPS[id] + offset < iMsecFPS)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= 5.0 || equal_array(fOrigin, g_fOrigin[id]))
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(g_iFPS[id] > iMsecFPS + offset2)
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= 5.0 || equal_array(fOrigin, g_fOrigin[id]))
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= get_pcvar_num(g_pWarnMaxSlow))
{
g_iWarnSlow[id] = 0;
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[Type 1]", szName);
}
if(g_iWarnSpeed[id] >= get_pcvar_num(g_pWarnMaxSpeed))
{
g_iWarnSpeed[id] = 0;
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[Type 2]", szName);
}
g_iFPS[id] = 0;
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя neverminde
сообщение 31.12.2013, 2:09
Сообщение #10


Стаж: 15 лет

Сообщений: 1133
Благодарностей: 595
Полезность: 576

протестил последнюю версию, зашёл на сервер с 2 клиентов. Один закрыл через винду.

Игрок повисел секунд 20 и вылетел.
Варнов не заметил
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 31.12.2013, 2:22
Сообщение #11


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Если ложных на данный момент нет, то нужно детект чита тестить.

Немного "косметики"
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.5"
#define AUTHOR "Mistrick"

#pragma semicolon 1

new g_iFPS[33], g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33], g_iMaxPlayers;
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];
new g_iWarnMaxSlow, g_iWarnMaxSpeed;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("hack_slowwarn", "5");
register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Pre", 0);
set_task(1.0, "CheckFps", 967854, _, _, "b");
g_iMaxPlayers = get_maxplayers();
g_iWarnMaxSlow = get_cvar_num("hack_slowwarn");
g_iWarnMaxSpeed = get_cvar_num("hack_speedwarn");
}
public FM_PlayerPreThink_Pre(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iFPS[id] += 1;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, offset2, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) continue;

iMsecFPS = floatround(1000.0/g_iMsec[id]);

//console_print(0, "id:%d, FPS: %d, Msec: %d => FPS: %d,", id, g_iFPS[id], g_iMsec[id], iMsecFPS);

switch(iMsecFPS)
{
case 1000: { offset = 350; offset2 = 350; }
case 500: { offset = 170; offset2 = 200; }
case 333: { offset = 70; offset2 = 150; }
case 250: { offset = 40; offset2 = 70; }
case 200, 167: { offset = 35; offset2 = 40; }
case 143, 125: { offset = 20; offset2 = 25; }
case 100, 71, 67, 63, 59, 48, 45, 43: { offset = 10; offset2 = 15; }
default: { offset = 10; offset2 = 10; }
}

if(g_iFPS[id] + offset < iMsecFPS)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= 5.0)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(g_iFPS[id] > iMsecFPS + offset2)
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= 5.0)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= g_iWarnMaxSlow)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= g_iWarnMaxSpeed)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_iFPS[id] = 0;
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
public Punish(id, type[])
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}


Отредактировал: Mistrick94, - 31.12.2013, 2:31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя shaid
сообщение 31.12.2013, 5:10
Сообщение #12


Стаж: 14 лет

Сообщений: 1012
Благодарностей: 432
Полезность: 835

Цитата(Mistrick94 @ 31.12.2013, 2:22) *
Если ложных на данный момент нет, то нужно детект чита тестить.

Немного "косметики"
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.5"
#define AUTHOR "Mistrick"

#pragma semicolon 1

new g_iFPS[33], g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33], g_iMaxPlayers;
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];
new g_iWarnMaxSlow, g_iWarnMaxSpeed;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("hack_slowwarn", "5");
register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Pre", 0);
set_task(1.0, "CheckFps", 967854, _, _, "b");
g_iMaxPlayers = get_maxplayers();
g_iWarnMaxSlow = get_cvar_num("hack_slowwarn");
g_iWarnMaxSpeed = get_cvar_num("hack_speedwarn");
}
public FM_PlayerPreThink_Pre(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iFPS[id] += 1;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, offset2, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) continue;

iMsecFPS = floatround(1000.0/g_iMsec[id]);

//console_print(0, "id:%d, FPS: %d, Msec: %d => FPS: %d,", id, g_iFPS[id], g_iMsec[id], iMsecFPS);

switch(iMsecFPS)
{
case 1000: { offset = 350; offset2 = 350; }
case 500: { offset = 170; offset2 = 200; }
case 333: { offset = 70; offset2 = 150; }
case 250: { offset = 40; offset2 = 70; }
case 200, 167: { offset = 35; offset2 = 40; }
case 143, 125: { offset = 20; offset2 = 25; }
case 100, 71, 67, 63, 59, 48, 45, 43: { offset = 10; offset2 = 15; }
default: { offset = 10; offset2 = 10; }
}

if(g_iFPS[id] + offset < iMsecFPS)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= 5.0)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(g_iFPS[id] > iMsecFPS + offset2)
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= 5.0)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= g_iWarnMaxSlow)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= g_iWarnMaxSpeed)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_iFPS[id] = 0;
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
public Punish(id, type[])
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}

пока без чита. версия плагина 0.5, кс 6153.
лог кс


[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)


лог сервера

id:1, FPS: 53, Msec: 10 => FPS: 100,
id:1, FPS: 562, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 194, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 384, Msec: 10 => FPS: 100,
id:1, FPS: 93, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 1136, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 193, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 85, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 193, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 288, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 192, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 88, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 87, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 11 => FPS: 91,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 1841, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 85, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,


попозже с читами потестирую.

upd: с rHack'ом потестил на пиратке 4554.
консоль кс

варнинги спидхака вылезали сразу как только скорость модельки начанала превышать 250 юнитов, варнинги слоухака сразу как только я его активировал.
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)


консоль сервера

id:1, FPS: 27, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 99, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 361, Msec: 1 => FPS: 1000,
id:1, FPS: 685, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 498, Msec: 1 => FPS: 1000,
id:1, FPS: 615, Msec: 10 => FPS: 100,
id:1, FPS: 87, Msec: 10 => FPS: 100,
id:1, FPS: 512, Msec: 1 => FPS: 1000,
id:1, FPS: 553, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 489, Msec: 1 => FPS: 1000,
id:1, FPS: 494, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 100, Msec: 10 => FPS: 100,
id:1, FPS: 100, Msec: 10 => FPS: 100,
id:1, FPS: 111, Msec: 1 => FPS: 1000,
id:1, FPS: 640, Msec: 2 => FPS: 500,
id:1, FPS: 735, Msec: 1 => FPS: 1000,
id:1, FPS: 733, Msec: 0 => FPS: -1073741824,
id:1, FPS: 719, Msec: 1 => FPS: 1000,
id:1, FPS: 439, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 91, Msec: 10 => FPS: 100,
id:1, FPS: 104, Msec: 10 => FPS: 100,
id:1, FPS: 102, Msec: 10 => FPS: 100,
id:1, FPS: 605, Msec: 1 => FPS: 1000,
id:1, FPS: 751, Msec: 1 => FPS: 1000,
id:1, FPS: 551, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 102, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 99, Msec: 10 => FPS: 100,
id:1, FPS: 528, Msec: 1 => FPS: 1000,
id:1, FPS: 744, Msec: 1 => FPS: 1000,
id:1, FPS: 741, Msec: 1 => FPS: 1000,
id:1, FPS: 720, Msec: 1 => FPS: 1000,
id:1, FPS: 352, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 0 => FPS: -1073741824,
id:1, FPS: 119, Msec: 1 => FPS: 1000,
id:1, FPS: 698, Msec: 1 => FPS: 1000,
id:1, FPS: 618, Msec: 2 => FPS: 500,
id:1, FPS: 681, Msec: 1 => FPS: 1000,
id:1, FPS: 689, Msec: 1 => FPS: 1000,
id:1, FPS: 165, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 85, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 99, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 496, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 1317, Msec: 22 => FPS: 45, // тут я окошко свернул
id:1, FPS: 36, Msec: 23 => FPS: 43,
id:1, FPS: 2663, Msec: 23 => FPS: 43,
id:1, FPS: 41, Msec: 22 => FPS: 45,
id:1, FPS: 2667, Msec: 23 => FPS: 43,
id:1, FPS: 40, Msec: 24 => FPS: 42,


Отредактировал: shaid, - 31.12.2013, 6:02
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 31.12.2013, 10:24
Сообщение #13


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Цитата(shaid @ 31.12.2013, 10:10) *
пока без чита. версия плагина 0.5, кс 6153.
лог кс


[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)


лог сервера

id:1, FPS: 53, Msec: 10 => FPS: 100,
id:1, FPS: 562, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 194, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 384, Msec: 10 => FPS: 100,
id:1, FPS: 93, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 1136, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 193, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 85, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 193, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 288, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 192, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 88, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 87, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 11 => FPS: 91,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 1841, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 85, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,


попозже с читами потестирую.

upd: с rHack'ом потестил на пиратке 4554.
консоль кс

варнинги спидхака вылезали сразу как только скорость модельки начанала превышать 250 юнитов, варнинги слоухака сразу как только я его активировал.
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)
[AMXX] SpeedHack warn(id is 1)
[AMXX] SlowHack warn(id is 1)


консоль сервера

id:1, FPS: 27, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 99, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 86, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 361, Msec: 1 => FPS: 1000,
id:1, FPS: 685, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 498, Msec: 1 => FPS: 1000,
id:1, FPS: 615, Msec: 10 => FPS: 100,
id:1, FPS: 87, Msec: 10 => FPS: 100,
id:1, FPS: 512, Msec: 1 => FPS: 1000,
id:1, FPS: 553, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 489, Msec: 1 => FPS: 1000,
id:1, FPS: 494, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 100, Msec: 10 => FPS: 100,
id:1, FPS: 100, Msec: 10 => FPS: 100,
id:1, FPS: 111, Msec: 1 => FPS: 1000,
id:1, FPS: 640, Msec: 2 => FPS: 500,
id:1, FPS: 735, Msec: 1 => FPS: 1000,
id:1, FPS: 733, Msec: 0 => FPS: -1073741824,
id:1, FPS: 719, Msec: 1 => FPS: 1000,
id:1, FPS: 439, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 91, Msec: 10 => FPS: 100,
id:1, FPS: 104, Msec: 10 => FPS: 100,
id:1, FPS: 102, Msec: 10 => FPS: 100,
id:1, FPS: 605, Msec: 1 => FPS: 1000,
id:1, FPS: 751, Msec: 1 => FPS: 1000,
id:1, FPS: 551, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 102, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 99, Msec: 10 => FPS: 100,
id:1, FPS: 528, Msec: 1 => FPS: 1000,
id:1, FPS: 744, Msec: 1 => FPS: 1000,
id:1, FPS: 741, Msec: 1 => FPS: 1000,
id:1, FPS: 720, Msec: 1 => FPS: 1000,
id:1, FPS: 352, Msec: 10 => FPS: 100,
id:1, FPS: 94, Msec: 0 => FPS: -1073741824,
id:1, FPS: 119, Msec: 1 => FPS: 1000,
id:1, FPS: 698, Msec: 1 => FPS: 1000,
id:1, FPS: 618, Msec: 2 => FPS: 500,
id:1, FPS: 681, Msec: 1 => FPS: 1000,
id:1, FPS: 689, Msec: 1 => FPS: 1000,
id:1, FPS: 165, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 85, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 99, Msec: 10 => FPS: 100,
id:1, FPS: 96, Msec: 10 => FPS: 100,
id:1, FPS: 97, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 496, Msec: 10 => FPS: 100,
id:1, FPS: 95, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 98, Msec: 10 => FPS: 100,
id:1, FPS: 1317, Msec: 22 => FPS: 45, // тут я окошко свернул
id:1, FPS: 36, Msec: 23 => FPS: 43,
id:1, FPS: 2663, Msec: 23 => FPS: 43,
id:1, FPS: 41, Msec: 22 => FPS: 45,
id:1, FPS: 2667, Msec: 23 => FPS: 43,
id:1, FPS: 40, Msec: 24 => FPS: 42,

Не те варнинги. Не надо снимать комментарии, пока нет ложных. При обнаружении чита должен вывести [AMXX] ник using hack[тип]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 2.1.2014, 19:30
Сообщение #14


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Обновил.
Так же прошу подкинуть идеи для детекта бхоп хаков.
...
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.7"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_WARN_TIME 5.0

new g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33];
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];
new g_iWarnMaxSlow, g_iWarnMaxSpeed, g_iMaxPlayers;

new g_iTimerFPS[33], g_iFrame[33], Float:g_fTime[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("hack_slowwarn", "5");
register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Post", 1);
set_task(0.5, "CheckFps", 967854, _, _, "b");
g_iMaxPlayers = get_maxplayers();
g_iWarnMaxSlow = get_cvar_num("hack_slowwarn");
g_iWarnMaxSpeed = get_cvar_num("hack_speedwarn");
}
public FM_PlayerPostThink_Post(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

if(++g_iFrame[id] < 16) return FMRES_IGNORED;

g_iFrame[id] = 0;

static Float:Time;
Time = get_gametime();
g_iTimerFPS[id] = floatround(16.0 / (Time - g_fTime[id]));
g_fTime[id] = Time;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) continue;

if(g_iMsec[id])
{
iMsecFPS = floatround(1000.0/g_iMsec[id]);
}
else
{
iMsecFPS = 1000;
}

//console_print(0, "id:%d, Msec: %d => FPS: %d, TimeFPS: %d",
// id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);

switch(iMsecFPS)
{
case 1000: offset = 350;
case 500: offset = 150;
case 333: offset = 80;
case 250: offset = 45;
case 200: offset = 30;
default: offset = 20;
}
if(iMsecFPS > g_iTimerFPS[id] + offset)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= MAX_WARN_TIME)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(iMsecFPS + offset < g_iTimerFPS[id])
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= MAX_WARN_TIME)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= g_iWarnMaxSlow)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= g_iWarnMaxSpeed)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
public Punish(id, type[])
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}


Отредактировал: Mistrick94, - 3.1.2014, 16:19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя shaid
сообщение 3.1.2014, 6:39
Сообщение #15


Стаж: 14 лет

Сообщений: 1012
Благодарностей: 432
Полезность: 835

Цитата(Mistrick94 @ 2.1.2014, 19:30) *
Обновил.
Так же прошу подкинуть идеи для детекта бхоп хаков.
...
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.7"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_WARN_TIME 5.0

new g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33];
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];
new g_iWarnMaxSlow, g_iWarnMaxSpeed, g_iMaxPlayers;

new g_iTimerFPS[33], g_iFrame[33], Float:g_fTime[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("hack_slowwarn", "5");
register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Post", 1);
set_task(0.5, "CheckFps", 967854, _, _, "b");
g_iMaxPlayers = get_maxplayers();
g_iWarnMaxSlow = get_cvar_num("hack_slowwarn");
g_iWarnMaxSpeed = get_cvar_num("hack_speedwarn");
}
public FM_PlayerPostThink_Post(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

if(++g_iFrame[id] < 16) return FMRES_IGNORED;

g_iFrame[id] = 0;

static Float:Time;
Time = get_gametime();
g_iTimerFPS[id] = floatround(16.0 /((Time - g_fTime[id])));
g_fTime[id] = Time;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) continue;

if(g_iMsec[id])
{
iMsecFPS = floatround(1000.0/g_iMsec[id]);
}
else
{
iMsecFPS = 1000;
}

//console_print(0, "id:%d, Msec: %d => FPS: %d, TimeFPS: %d",
// id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);

switch(iMsecFPS)
{
case 1000: offset = 350;
case 500: offset = 150;
case 333: offset = 70;
case 250: offset = 40;
case 200: offset = 30;
default: offset = 10;
}
if(iMsecFPS > g_iTimerFPS[id] + offset)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= MAX_WARN_TIME)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
}
if(iMsecFPS + offset < g_iTimerFPS[id])
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= MAX_WARN_TIME)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
}
if(g_iWarnSlow[id] >= g_iWarnMaxSlow)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= g_iWarnMaxSpeed)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
public Punish(id, type[])
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}

поставил на паблик с нормальным онлайном.
повысил:
Код
   register_cvar("hack_slowwarn", "8");  
   register_cvar("hack_speedwarn", "8");


иногда срабатывают оба детекта (Type1 чаще) на самых обычных, ничем не примечательных игроках, в основном на "бомжах" которые с трудом ходят углы цепляя.
но бывает что и на читерах срабатывает, правда двигаются они совершенно обычно, их только аим выдаёт. обычно на нескольких игроках за карту детектит, 2-3. бывает что несколько раз за раунд на одном игроке.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 3.1.2014, 11:55
Сообщение #16


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Цитата(shaid @ 3.1.2014, 11:39) *
поставил на паблик с нормальным онлайном.
повысил:
Код
   register_cvar("hack_slowwarn", "8");  
   register_cvar("hack_speedwarn", "8");


иногда срабатывают оба детекта (Type1 чаще) на самых обычных, ничем не примечательных игроках, в основном на "бомжах" которые с трудом ходят углы цепляя.
но бывает что и на читерах срабатывает, правда двигаются они совершенно обычно, их только аим выдаёт. обычно на нескольких игроках за карту детектит, 2-3. бывает что несколько раз за раунд на одном игроке.

Попробуй заменить на это
Код:
switch(iMsecFPS)
{
case 1000: offset = 350;
case 500: offset = 150;
case 333: offset = 80;
case 250: offset = 45;
case 200: offset = 30;
default: offset = 20;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя shaid
сообщение 3.1.2014, 13:09
Сообщение #17


Стаж: 14 лет

Сообщений: 1012
Благодарностей: 432
Полезность: 835

Цитата(Mistrick94 @ 3.1.2014, 11:55) *
Попробуй заменить на это
Код:
switch(iMsecFPS)
{
case 1000: offset = 350;
case 500: offset = 150;
case 333: offset = 80;
case 250: offset = 45;
case 200: offset = 30;
default: offset = 20;
}

направление верное. детектов стало гораздо меньше. на некоторых игроков плагин указывать перестал, но пару раз сработал детект обоих тайпов на двух игроках, это под конец третьей карты. до этого за 3 карты плагин не детектил этих игроков почему-то, да и вообще никого не детектил. я уже думал, что это успех.

Отредактировал: shaid, - 3.1.2014, 13:55
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 3.1.2014, 16:24
Сообщение #18


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Версия с логом.
...
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.8"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define LOGGING

#define MAX_WARN_TIME 5.0

new g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33];
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];
new g_iWarnMaxSlow, g_iWarnMaxSpeed, g_iMaxPlayers;

new g_iTimerFPS[33], g_iFrame[33], Float:g_fTime[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("hack_slowwarn", "5");
register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Post", 1);
set_task(0.5, "CheckFps", 967854, _, _, "b");
g_iMaxPlayers = get_maxplayers();
g_iWarnMaxSlow = get_cvar_num("hack_slowwarn");
g_iWarnMaxSpeed = get_cvar_num("hack_speedwarn");
}
public FM_PlayerPostThink_Post(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

if(++g_iFrame[id] < 16) return FMRES_IGNORED;

g_iFrame[id] = 0;

static Float:Time;
Time = get_gametime();
g_iTimerFPS[id] = floatround(16.0 / (Time - g_fTime[id]));
g_fTime[id] = Time;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) continue;

if(g_iMsec[id])
{
iMsecFPS = floatround(1000.0/g_iMsec[id]);
}
else
{
iMsecFPS = 1000;
}

//console_print(0, "id:%d, Msec: %d => FPS: %d, TimeFPS: %d",
// id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);

switch(iMsecFPS)
{
case 1000: offset = 350;
case 500: offset = 150;
case 333: offset = 80;
case 250: offset = 45;
case 200, 167: offset = 30;
default: offset = 25;
}
if(iMsecFPS > g_iTimerFPS[id] + offset)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= MAX_WARN_TIME)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
#if defined LOGGING
log_to_file("hackdetector.log", "[Type 1] ID: %d, Msec: %d, MsecFPS: %d, TimeFPS: %d", id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);
#endif
}
if(iMsecFPS + offset < g_iTimerFPS[id])
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= MAX_WARN_TIME)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
#if defined LOGGING
log_to_file("hackdetector.log", "[Type 1] ID: %d, Msec: %d, MsecFPS: %d, TimeFPS: %d", id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);
#endif
}
if(g_iWarnSlow[id] >= g_iWarnMaxSlow)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= g_iWarnMaxSpeed)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
public Punish(id, type[])
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
#if defined LOGGING
log_to_file("hackdetector.log", "[%s] ID: %d using hack", type, id);
#endif
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}


Отредактировал: Mistrick94, - 3.1.2014, 16:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя shaid
сообщение 3.1.2014, 16:57
Сообщение #19


Стаж: 14 лет

Сообщений: 1012
Благодарностей: 432
Полезность: 835

Цитата(Mistrick94 @ 3.1.2014, 16:24) *
Версия с логом.
...
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Hack Detector"
#define VERSION "0.8"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define LOGGING

#define MAX_WARN_TIME 5.0

new g_iMsec[33], g_iWarnSlow[33], g_iWarnSpeed[33];
new Float:g_fWarnSlowTime[33], Float:g_fWarnSpeedTime[33], Float:g_fOrigin[33][3];
new g_iWarnMaxSlow, g_iWarnMaxSpeed, g_iMaxPlayers;

new g_iTimerFPS[33], g_iFrame[33], Float:g_fTime[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("hack_slowwarn", "5");
register_cvar("hack_speedwarn", "5");
register_forward(FM_CmdStart, "FM_CmdStart_Pre", 0);
register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Post", 1);
set_task(0.5, "CheckFps", 967854, _, _, "b");
g_iMaxPlayers = get_maxplayers();
g_iWarnMaxSlow = get_cvar_num("hack_slowwarn");
g_iWarnMaxSpeed = get_cvar_num("hack_speedwarn");
}
public FM_PlayerPostThink_Post(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

if(++g_iFrame[id] < 16) return FMRES_IGNORED;

g_iFrame[id] = 0;

static Float:Time;
Time = get_gametime();
g_iTimerFPS[id] = floatround(16.0 / (Time - g_fTime[id]));
g_fTime[id] = Time;

return FMRES_IGNORED;
}
public FM_CmdStart_Pre(id, uc_handle, seed)
{
if(!is_user_alive(id)) return FMRES_IGNORED;

g_iMsec[id] = get_uc(uc_handle, UC_Msec);

return FMRES_IGNORED;
}
public CheckFps()
{
static id, iMsecFPS, offset, Float:fTime, Float:fOrigin[3];
fTime = get_gametime();
for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_alive(id)) continue;

pev(id, pev_origin, fOrigin);
if(equal_array(fOrigin, g_fOrigin[id])) continue;

if(g_iMsec[id])
{
iMsecFPS = floatround(1000.0/g_iMsec[id]);
}
else
{
iMsecFPS = 1000;
}

//console_print(0, "id:%d, Msec: %d => FPS: %d, TimeFPS: %d",
// id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);

switch(iMsecFPS)
{
case 1000: offset = 350;
case 500: offset = 150;
case 333: offset = 80;
case 250: offset = 45;
case 200, 167: offset = 30;
default: offset = 25;
}
if(iMsecFPS > g_iTimerFPS[id] + offset)
{
//client_print(0, print_chat, "[AMXX] SlowHack warn(id is %d)", id);
if(g_iWarnSlow[id] && fTime - g_fWarnSlowTime[id] >= MAX_WARN_TIME)
{
g_iWarnSlow[id] = 0;
}
g_iWarnSlow[id]++;
g_fWarnSlowTime[id] = fTime;
#if defined LOGGING
log_to_file("hackdetector.log", "[Type 1] ID: %d, Msec: %d, MsecFPS: %d, TimeFPS: %d", id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);
#endif
}
if(iMsecFPS + offset < g_iTimerFPS[id])
{
//client_print(0, print_chat, "[AMXX] SpeedHack warn(id is %d)", id);
if(g_iWarnSpeed[id] && fTime - g_fWarnSpeedTime[id] >= MAX_WARN_TIME)
{
g_iWarnSpeed[id] = 0;
}
g_iWarnSpeed[id]++;
g_fWarnSpeedTime[id] = fTime;
#if defined LOGGING
log_to_file("hackdetector.log", "[Type 1] ID: %d, Msec: %d, MsecFPS: %d, TimeFPS: %d", id, g_iMsec[id], iMsecFPS, g_iTimerFPS[id]);
#endif
}
if(g_iWarnSlow[id] >= g_iWarnMaxSlow)
{
g_iWarnSlow[id] = 0;
Punish(id, "Type 1");
}
if(g_iWarnSpeed[id] >= g_iWarnMaxSpeed)
{
g_iWarnSpeed[id] = 0;
Punish(id, "Type 2");
}
g_fOrigin[id][0] = fOrigin[0];
g_fOrigin[id][1] = fOrigin[1];
g_fOrigin[id][2] = fOrigin[2];
}
}
public Punish(id, type[])
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "[AMXX] %s using hack[%s]", szName, type);
#if defined LOGGING
log_to_file("hackdetector.log", "[%s] ID: %d using hack", type, id);
#endif
}
stock equal_array(Float:a[3], Float:b[3])
{
if(floatabs(a[0] - b[0]) < 0.000001 && floatabs(a[1] - b[1]) < 0.000001 && floatabs(a[2] - b[2]) < 0.000001)
return 1;
return 0;
}

логи это хорошо, но теперь плагин флудит в консоли.
Цитата
L 01/04/2014 - 01:53:16: [Type 1] ID: 8, Msec: 10, MsecFPS: 100, TimeFPS: 59
L 01/04/2014 - 01:53:17: [Type 1] ID: 8, Msec: 11, MsecFPS: 91, TimeFPS: 60
L 01/04/2014 - 01:53:18: [Type 1] ID: 1, Msec: 12, MsecFPS: 83, TimeFPS: 57
L 01/04/2014 - 01:53:19: [Type 1] ID: 8, Msec: 10, MsecFPS: 100, TimeFPS: 60
L 01/04/2014 - 01:53:20: [Type 1] ID: 16, Msec: 29, MsecFPS: 34, TimeFPS: 60
L 01/04/2014 - 01:53:24: [Type 1] ID: 8, Msec: 11, MsecFPS: 91, TimeFPS: 49
L 01/04/2014 - 01:53:28: [Type 1] ID: 1, Msec: 10, MsecFPS: 100, TimeFPS: 63
L 01/04/2014 - 01:53:28: [Type 1] ID: 8, Msec: 10, MsecFPS: 100, TimeFPS: 60
L 01/04/2014 - 01:53:29: [Type 1] ID: 8, Msec: 11, MsecFPS: 91, TimeFPS: 56
L 01/04/2014 - 01:53:32: [Type 1] ID: 8, Msec: 10, MsecFPS: 100, TimeFPS: 60

сообщений не много, в принципе не критично.

Отредактировал: shaid, - 3.1.2014, 16:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 3.1.2014, 17:18
Сообщение #20


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

shaid, нужны логи, когда в чат напишет о использовании хака.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
4 страниц V   1 2 3 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: