Satellite | Дата: Пятница, 30.03.2012, 18:01 | Сообщение # 1 |
Местный
Группа:
Продвинутые
Сообщений: 622
Награды: 10
Город: Хмельницкий
Замечания: 20%
Статус:
| Здравствуйте! В этом теме я опубликую свой античит на Aim. Собственно, в нашем случае Aim'ом является режим управления через Joypad или программа (альтернатива) Aim (перчик на ярлыке).
Алгоритм: При использовании данного типа прицеливания у игрока отключён прицел, но есть круглая обводка, которая постоянно наведена на нашу цель. Во время выстрелов (видны только тому, кто стреляет, пули попадут в цель лишь тогда, если у цели пинг < 30 или он стоит на месте) мы проверяем, на кого наведён прицел. Если выстрел произошел, а прицела нет — игрок использует наш вышеупомянутый «аим».
Code #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
Копирование материала на посторонние ресурсы без разрешения автора строго запрещено!
Сообщение отредактировал Satellite - Суббота, 31.03.2012, 00:40 |
|
|
|
Kr[A]z | Дата: Пятница, 30.03.2012, 18:46 | Сообщение # 2 |
Советчик
Группа:
Пользователи
Сообщений: 1203
Награды: 18
Город: Барнаул
Репутация: 1794
Замечания: 80%
Статус:
| А разве не целясь нельзя попасть?
|
|
|
|
Satellite | Дата: Пятница, 30.03.2012, 19:06 | Сообщение # 3 |
Местный
Группа:
Продвинутые
Сообщений: 622
Награды: 10
Город: Хмельницкий
Замечания: 20%
Статус:
| Хорошо подметил. Как включат в доме электричество - добавлю условие на несколько таких выстрелов подряд с GetTickCount.
|
|
|
|
[RD]Chez | Дата: Пятница, 30.03.2012, 19:06 | Сообщение # 4 |
Мастер джэдай
Группа:
Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус:
| можно автор, это не туториал, это - "я пиарюсь" зовется
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
chezrd@gmail.com lance@chez-lab.ru
|
|
|
|
Satellite | Дата: Суббота, 31.03.2012, 00:42 | Сообщение # 5 |
Местный
Группа:
Продвинутые
Сообщений: 622
Награды: 10
Город: Хмельницкий
Замечания: 20%
Статус:
| Обновил первое сообщение, немного переписал античит.
Quote (|RD|Chez) автор, это не туториал, это - "я пиарюсь" зовется Если ты простой урок / туториал считаешь «пиаром» — дело твоё, но ведь это не значит, что это так есть.
|
|
|
|