Приветствую Вас Гость | RSS

Все для SA-MP

Воскресенье, 29.06.2025, 04:08
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Создаем анти-чит на AIM
Подполковник

massa Администраторы

Сообщения:
145
Симпатия:
1
Античит на Aim:

Quote
Здравствуйте! В этом теме я опубликую свой античит на Aim. Собственно, в нашем случае Aim'ом является режим управления через Joypad или программа (альтернатива) Aim (перчик на ярлыке).


Алгоритм: При использовании данного типа прицеливания у игрока отключён прицел, но есть круглая обводка, которая постоянно наведена на нашу цель. Во время выстрелов (видны только тому, кто стреляет, пули попадут в цель лишь тогда, если у цели пинг < 30 или он стоит на месте) мы проверяем, на кого наведён прицел. Если выстрел произошел, а прицела нет — игрок использует наш вышеупомянутый «аим».

Установка:
В начало мода:
Code
#define MAX_AIM_TICKS 3 // Требуемое кол-во выстрелов, чтобы определить чит

В паблик(public) OnPlayerGiveDamage:
Code
if(damagedid == INVALID_PLAYER_ID || !CheckFireArm(GetPlayerWeapon(playerid)) || GetPlayerTargetPlayer(playerid) != INVALID_PLAYER_ID) return 1; // Если игрок ни в кого не стреляет / стреляет не с огнестрельного оружия / не прицелился в цель
new count = GetPVarInt(playerid, "aimcount"), ticks = GetPVarInt(playerid, "aimtick"), currtick = GetTickCount(); // Переменные для кол-ва выстрелов; время последнего выстрела относительно запуска сервера; текущего время относительно запуска сервера     
if(currtick - ticks <= 10000 && count + 1 >= MAX_AIM_TICKS) { // Если интервал между выстрелами меньше или равен 10 секунд и кол-во выстрелов больше или равно требуемому кол-ву выстрелов, чтобы определить чит     
new msg[144], name[MAX_PLAYER_NAME];  // Массивы для сообщения и хранения никнейма игрока     
GetPlayerName(playerid, name, MAX_PLAYER_NAME); // Узнаём никнейм игрока     
format(msg, 144, "%s[%i] кикнут по подозрению на использование Aim / Joypad.", name, playerid); // Форматируем сообщение     
SendClientMessageToAll(-1, msg); // Отправляем сообщение всем игрокам     
Kick(playerid); // Кикаем читера     
// ПРИМЕЧАНИЕ! Если Вы замените кик на другое наказание (к примеру, сообщение) — добавьте сюда удаление PVAR'ов и ануллирование переменной count (как в коде после оператора else if ниже)     
}     
else if(currtick - ticks > 10000) { // Если условие выше не выполнилось и интервал между выстрелами больше 10 секунд     
DeletePVar(playerid, "aimcount"); // Удаляем PVar, который хранит кол-во выстрелов     
DeletePVar(playerid, "aimtick"); // Удаляем PVar, который хранит время относительно включения сервера     
count = 0; // Ануллируем переменную count     
currtick = GetTickCount(); // Обновляем время относительно запуска сервера     
}     
SetPVarInt(playerid, "aimcount", count + 1); // Записываем кол-во выстрелов     
SetPVarInt(playerid, "aimtick", currtick); // Записываем время последнего выстрела относительно запуска сервера (в милисекундах)

Создаем сток(stock). Вставляем в конец мода:
Code
CheckFireArm(weaponid) { // Ф-ция, которая определяет, огнестрельное ли оружие (weaponid)
          switch(weaponid) {
             case 16..39, 41..43: return 1; // Условие, если ID оружие в указанном диапазоне — ф-ция возвращает 1
             default: return 0; // Если оружие вне указанного выше диапазона — ф-ция возвращает 0
          }
          return 0;
}


Автор: Snoowker


ТРЕБУЮТСЯ МОДЕРАТОРЫ НА ФОРУМ!

 
Нездешний

PWN Пользователи

Сообщения:
4
Симпатия:
-1
ljhGHJ KHGkgqkh qw GKhGgaA
 
  • Страница 1 из 1
  • 1
Поиск: