Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Вы не подключены. Войдите или зарегистрируйтесь

[ Scr ][ All ] Античит на Aim

Перейти вниз  Сообщение [Страница 1 из 1]

1[ Scr ][ All ] Античит на Aim  Empty [ Scr ][ All ] Античит на Aim Пт Ноя 08, 2013 1:39 pm

Pawno

Pawno
Местный
Местный

Код:
#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

Вернуться к началу  Сообщение [Страница 1 из 1]

Права доступа к этому форуму:
Вы не можете отвечать на сообщения