Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Античит на Aim (программа перчик / Joypad)

Статус
В этой теме нельзя размещать новые ответы.

Snoowker

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

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

PHP:
#define MAX_AIM_TICKS 3 // Требуемое кол-во выстрелов, чтобы определить чит
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid) { // Автовызываемая ф-ция, которая отвечает за то, что игрок в своём клиенте пытается дать урон другому игроку 
	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); // Записываем время последнего выстрела относительно запуска сервера (в милисекундах)
    return 1;
}

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

Копирование материала на посторонние ресурсы без разрешения автора строго запрещено!​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу