Статус В этой теме нельзя размещать новые ответы.
kaZax
samp.work
Автор темы
Проверенный
Пишем античит на оружие.
Сначала создаем массив для всех игрокок и на все оружие.
new Weapons[MAX_PLAYERS][47];
Теперь обнуляем массив игрока
В паблик OnPlayerConnect
for(new i=0;i<47;i++) Weapons[playerid][i]=0;//обнуление
Теперь защиту от ложных срабатываний, например когда садимся в авто:
В паблик OnPlayerStateChange
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) < new model = GetVehicleModel(GetPlayerVehicleID(playerid)); switch(model) < case 592,577,511,512,520,593,553,476,519,460,513,548,425,417,487,488,497,563,447,469: Weapons[playerid][46]= 1; case 457: Weapons[playerid][2]= 1; case 596,597,598,599: Weapons[playerid][25]= 1; >>
Теперь саму проверку:
В паблик OnPlayerUpdate
new weap = GetPlayerWeapon(playerid); if(weap != 0 !Weapons[playerid][weap] weap != 40) < //Действие например кик Kick(playerid); >
Теперь сток через которое мы даем оружие
Плагин На Защиту Сервера От Читов | Античит Spartan Для Сервера Майнкрафт
stock GiveWeapon(player,weapid,ammo)
Теперь нужно заменить все GivePlayerWeapon на GiveWeapon
Через дефайн не будет работать проверено.
Например код:
#define GivePlayerWeapon GiveWeapon
Источник: www.blast.hk
Тема: Перехват функций, часть 2: практика — пишем античит на HP
Перехват функций, часть 2: практика — пишем античит на HP
Sup.
В этой части мы рассмотрим создание простого античита на HP, подходящего к любому моду*.
* За исключением тех, на которых уже есть аналогичный античит,
в этом случае два разных античита могут конфликтовать друг с другом.
-
Внутри инклуда задавайте переменным и функциям (в т.ч. перехватываемым) один и тот же префикс, связанный с названием инклуда.
Главное, чтобы этот префикс и названия переменных и функций в этом скрипте были уникальными, т.е. не повторялись в других инклудах и в основном скрипте.
Также название префикса должно быть как можно менее общим. Плохие примеры: «ac», «fix».
Античиты и багфиксы могут быть разные, поэтому старайтесь, отразить суть своего багфикса или античита. Например, «ac_spect__» (античит на невидимость, получаемую имитацией перехода в спект) (на самом деле, после «ac_hp» только 1 символ подчёркивания — это из-за ограничения названий до 31 символов в Pawn) или «ac_hp__» (античит на читерское HP).
Если префиксы будут повторяться в разных перехватах, то эти перехваты будут конфликтовать друг с другом, что, в свою очередь, помешает компиляции скрипта.
Пример: если есть инклуд «afk_system.inc», в котором реализована система AFK, можно использовать в нём префикс «afk_sys__» для перехватов, переменных, констант и функций (кроме тех функций, которые будут видны за пределами инклуда, например IsPlayerAFK).
КАК ЗАЩИТИТЬ СВОЙ СЕРВЕР МАЙНКРАФТ ОТ ЧИТЕРОВ? (СЛИВ AAC и MAC АНТИЧИТОВ) 1.16.5
Перейдём обратно к заданию — написанию античита на HP.
Сначала нужно определиться, как мы назовём инклуд с античитом и какой префикс будем использовать для переменных/функций.
Для примера подойдёт название «ac_health.inc» или «ac_hp.inc». Соответственно, будем использовать префикс «ac_hp__».
Дальше создадим массив, в который будем записывать здоровье игроков, устанавливаемое сервером:
Вместо new массив объявлен с помощью ключевого слова static — так, если перенести весь античит в отдельный инклуд, массив будет виден только внутри инклуда и не будет мешаться в моде.
Дальше можно было бы найти все вызовы SetPlayerHealth и под ними дублировать устанавливаемое кол-во HP в ac_health__health:
- Выискивать вручную все вызовы и точно так же вручную «прицеплять» к каждому из них дублирование HP в массив. И ни в коем случае не пропустить ни одного из них!
- Всегда при использовании SetPlayerHealth держать в голове, что нужно добавить дублирование в ac_health.
Но ведь можно просто найти все вызовы SetPlayerHealth и под ними копировать устанавливаемое кол-во HP в ac_health!
И именно поэтому такой подход всегда был и будет считаться быдлокодерством — абсолютно никаких гарантий надёжности и куча проблем, причину которых очень трудно найти. От человеческого фактора нельзя полностью избавиться, лучшее, что можно сделать — минимизировать риск, избавившись от дублирования кода.
С техникой перехвата ситуация намного проще.
Поскольку перехватчик всего один, достаточно лишь адекватно протестировать хотя бы 1 случай его использования.
Затем во всех остальных случаях вызова SetPlayerHealth компилятор возьмёт всю рутинную работу по разбору перехватов на себя и перехватчик всегда будет вести себя так, как было запланировано.
В результате вероятность возникновения ошибки сводится к нулю. Такой код поддерживать намного проще.
Сделаем перехват функции SetPlayerHealth и в этом перехватчике осуществим дублирование выдаваемого кол-ва HP в массив:
Теперь нужно будет в функцию OnPlayerUpdate добавить проверку игрока на несанкционированное восстановление HP и последующую выдачу бана.
Всё это, как вы уже могли догадаться, будет сделано с помощью перехватов.
Теперь сделаем перехват GetPlayerHealth. По идее он не обязателен и никак не отразится на работе античита.
Но в случае с функцией GetPlayerHealth предоставляется возможность избавиться от вызова нативной функции, подменив её на функцию, написанную на Pawn — таким образом повысится производительность работы сервера при вызове функции.
При этом на возвращаемом функцией значении это никак не отразится, т.к. античит теперь имеет полный контроль над HP игрока.
Внимание! Перехват OnPlayerUpdate следует делать выше перехватов GetPlayerHealth/SetPlayerHealth, иначе они будут влиять на работу перехватчика в OnPlayerUpdate, если в нём используются те функции.
Но это ещё не всё. Если выдать игроку здоровье, оно выдастся ему не сразу из-за пинга.
Античит проверит здоровье со следующим вызовом OnPlayerUpdate ещё до того, как здоровье обновится у игрока, в результате сервер запишет то кол-во HP, которое было ещё до выдачи.
Как только у игрока обновится HP, в античите будет записано прежнее значение, и после ещё одной проверки в OnPlayerUpdate античит выдаст ложное срабатывание.
Нужно исправить эту ситуацию. Сделаем так, чтобы античит игнорировал уменьшение HP у игрока в течение 1 секунды после выдачи.
К переменным (под ac_hp__health):
Добавим перед переменными константу, в которой укажем время для игнорирования:
Почему вокруг объявления константы используется #if defined? Это мы разберём позже.
А пока что добавим игнорирование в перехвате OnPlayerUpdate.
Найдите строку:
и замените её на:
И остаётся лишь сделать запись времени, до которого античит будет игнорировать игрока.
В перехвате SetPlayerHealth найдите строки:
и замените их на:
Теперь античит не будет выдавать ложных срабатываний при выдаче HP.
Но остаётся ещё одна проблема: игрок будет умирать во время спавна.
Суть в том, что при спавне у игрока всегда 100 HP, а в античите в это время записано 0.
Если сервер не выдаст игроку новое кол-во HP, античит выдаст ложное срабатывание и установит игроку 0 HP.
Чтобы исправить эту проблему, добавим под перехватом OnPlayerUpdate перехват OnPlayerSpawn, в котором запишем у игрока 100 HP.
Итак, если игрок накручивает HP читами, античит будет понижать здоровье обратно.
Но что, если нам нужно не только нейтрализовать читера, но и оповестить администрацию?
Можно добавить после понижения здоровья вызов какой-нибудь функции из мода (например, SendAdminMessage) для вывода модераторам сообщения о читере, НО такая функция есть не везде, а потому модуль не будет работать на всех модах.
Поэтому мы поступим иначе: добавим в мод коллбэк OnHPCheatDetected и в нём будем записывать весь код, который «привязан» к тому моду.
Здесь же сделаем вызов коллбэка. В перехвате OnPlayerUpdate находим строку:
и заменяем её на:
И не забудем добавить опережающее объявление коллбэка для мода. В конец инклуда:
Обратите внимание: в обоих отрывках присутствует «#if defined» — это сделано для того, чтобы убедиться, что коллбэк OnHPCheatDetected реализован в моде.
Если его в моде нет, он не будет вызван из инклуда — иначе были бы ошибки из-за вызова несуществующей функции.
Наконец, составим весь код воедино и вынесем его в отдельный инклуд (например, «ac__health.inc», здесь «ac» — сокращение от «AntiCheat»).
Результат должен выглядеть примерно так, как в этой теме.
В итоге получается система, совершенно никак не привязанная к конкретному моду.
Поскольку она готова, остаётся лишь использовать её в вашем моде.
Сохраним инклуд в папке «pawno/include» и подключим его:
После этого добавим в мод коллбэк OnHPCheatDetected, который уже сделан в инклуде:
Если у Вас получилось всё вышеперечисленное — поздравляю, Вы написали свой первый модуль на Pawn с использованием перехватов.
К следующей неделе придумаю ещё несколько примеров для 3-й части урока.
Специально для Pro-Pawn.ru
Копирование данной статьи на других ресурсах без разрешения автора запрещено!
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Мои работы:
16 пользователя(ей) сказали cпасибо:
13.10.2014, 22:02 #2
Пользователь
Статус Оффлайн
Регистрация 21.04.2013
Адрес Россия
Сообщений 154
Репутация: 1 ±
а вот теперь все получилось и без ошибок! сейчас буду тестировать!
Последний раз редактировалось Dima_Tushin; 13.10.2014 в 22:10 .
14.10.2014, 12:56 #3
Пользователь
Статус Оффлайн
Регистрация 21.04.2013
Адрес Россия
Сообщений 154
Репутация: 1 ±
вчера я сделал но у меня не ловило читерское хп жалко блин ладно еще раз попробую!
14.10.2014, 13:36 #4
Пользователь
Статус Оффлайн
Регистрация 21.04.2013
Адрес Россия
Сообщений 154
Репутация: 1 ±
Помоги Daniel посмотри что я не правильного сделал?
Открыть/закрыть
Copyright (c) 2014 Daniel_Cortez
This software is provided ‘as-is’, without any express or implied warranty.
In no event will the authors be held liable for any damages arising from the
use of this software. Permission is granted to anyone to use this software for
any purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software in
a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
=============================================================================*/
static Float : Health [ MAX_PLAYERS ];
/************************************************/
stock SetPlayerHealthAC ( playerid , Float : healthe )
Health [ playerid ] = healthe ;
return SetPlayerHealth ( playerid , healthe );
>
#if defined _ASC_SetPlayerHealth
#undef SetPlayerHealth
#else
#define _ASC_SetPlayerHealth
#endif
#define SetPlayerHealth SetPlayerHealthAC
/************************************************/
public OnPlayerUpdate ( playerid )
new Float : health ;
GetPlayerHealth ( playerid , health );
if(( Health [ playerid ] != health ))
if( Health [ playerid ] > health )
Health [ playerid ] = health ;
#if defined OnHPCheatDetected
OnHPCheatDetected ( playerid , Health [ playerid ], health );
#endif
>
else if( Health [ playerid ] < health )
Health [ playerid ] = health ;
#if defined OnHPCheatDetected
OnHPCheatDetected ( playerid , Health [ playerid ], health );
#endif
>
>
>
#if defined OnPlayerUpdateAC
OnPlayerUpdateAC ( playerid );
#endif
return 1 ;
>
#if defined _ALS_OnPlayerUpdate
#undef OnPlayerUpdate
#else
#define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate OnPlayerUpdateAC
#if defined OnPlayerUpdateAC
forward OnPlayerUpdateAC ( playerid );
#endif
/************************************************/
public OnPlayerSpawn ( playerid )
Health [ playerid ] = 100 ;
#if defined OnPlayerSpawnAC
OnPlayerSpawnAC ( playerid );
#endif
return 1 ;
>
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn OnPlayerSpawnAC
#if defined OnPlayerSpawnAC
forward OnPlayerSpawnAC ( playerid );
#endif
/************************************************/
stock GetPlayerHealthAC ( playerid ,
return 1 ;
>
#if defined _ALS_GetPlayerHealth
#undef GetPlayerHealth
#else
#define _ALS_GetPlayerHealth
#endif
#define GetPlayerHealth GetPlayerHealthAC
/************************************************/
#if defined OnHPCheatDetected
forward OnHPCheatDetected ( playerid , Float : hp_expected , Float : hp_got );
#endif
Источник: pro-pawn.ru
Ошибка «Служба Easy Anti Cheat не установлена»: причины и решения
Сообщение «Служба Easy Anti Cheat не установлена» может возникнуть при запуске Fortnite, Apex Legends и других игр, задействующих функционал этого античитерского ПО. EAC устанавливается автоматически вместе с самой игрой. Так в чем же проблема?
Почему служба Easy Anti Cheat не установлена?
- EAC недостает прав администратора. Для нормальной работы программе EAC необходимо обладать правами администраторской учетной записи. Если не выдать соответствующие разрешения, программа может полностью прекратить свою работу либо работать, но с ошибками.
- Служба EAC отключена. EAC не будет выполнять возложенную на него работу, если на компьютере пользователя не работает не одноименная служба.
- Поврежденный файлы EAC. Повреждение файлов программы EAC зачастую происходят во время ее установки. Разумеется, в таком случае программа не будет работать должным образом, и пользователь не запустит нужную ему игрушку.
- EAC не установлен. Подобная проблема встречается крайне редко, но это возможно. При загрузке и установке игры что-то пошло не так, и параллельная установка EAC не прошла.
- Конфликт EAC с антивирусом/брандмауэром. Ваш антивирус или брандмауэр мог войти в конфликт с EAC, блокируя работу последнего. К сожалению, за такими «проделками» замечены даже системные средства Windows.
- Устаревшая версия Windows. Стабильная работа EAC не гарантирована, если ОС пользователя не обновлена до последней версии.
«Служба Easy Anti Cheat не установлена»: решения
Решение №1 Проверка службы EAC
Сначала проверим, правильно ли настроена на вашем ПК служба EAC. Как правило, данная служба должна автоматически запускаться одновременно с игрой, но порой этого не происходит. В некоторых случаях службу по ошибке могло деактивировать защитное ПО, например, антивирус. Так или иначе попробуйте сделать на своем ПК следующее:
- нажмите WIN+R для вызова окошка «Выполнить»;
- пропишите в пустую строку services.msc и нажмите ENTER;
- найдите в списке службу EasyAntiCheat и дважды кликните на нее ЛКМ;
- выставьте в типе запуска значение «Вручную» и сохраните изменения.
Теперь при запуске игры должна запускаться и служба EAC.
Решение №2 Восстановление файлов EAC
Если вы столкнулись с ошибкой «Служба Easy Anti Cheat не установлена», то, вероятно, некоторые из файлов EAC были повреждены или даже удалены. Это могло произойти, например, по вине пользователя или какой-то программы. К счастью, в папке игры, которая задействует функционал EAC, должен находится установщик античита, с помощью которого можно восстановить целостность последнего.
- Откройте корневую папку игры, которую вы не можете запустить, и ищите в ней папку EasyAntiCheat;
- кликните ПКМ на файл EasyAntiCheat_Setup.exe и выберите «Запуск от имени администратора»;
- в новом окошке выберите нужную игру и кликните на кнопку «Починить службу»;
- подождите завершения процесса восстановления файлов EAC.
После восстановления EAC попробуйте открыть проблемную игру. Теперь, возможно, все откроется без каких-либо проблем.
Решение №3 Переустановка игры
Как мы уже говорили выше, EAC автоматически устанавливается вместе с самой игрой. Кроме того, античит автоматически и удаляется вместе с игрой. Понимаете, к чему мы клоним? Верно, чтобы решить проблему, достаточно переустановить игру на свой ПК. Вот что вам нужно сделать:
- кликните ПКМ на Пуск и выберите «Приложения и возможности»;
- найдите в списке игру, которую вам не удается запустить, и выделите ее;
- появится выбор действия — нажмите «Удалить»;
- следуйте дальнейшим инструкциям для удаления игры;
- перезагрузите компьютер и снова установите игру.
Все, готово. Переустановлена не только игра, но и EAC. Если файлы последнего были повреждены, то ошибка должна исчезнуть.
Решение №4 Обновление Windows
EAC может испытывать проблемы при работе, если на ПК пользователя не установлен ряд конкретных обновлений Windows. Верно, большинство из нас предпочитают игнорировать/отключать регулярные апдейты ОС, однако некоторые из них очень важны, и требуются для нормальной работы определенного ПО. Как бы не хотелось этого делать, но мы рекомендуем установить все отложенные обновления Windows.
Делается это следующим образом:
- кликните ПКМ на Пуск и выберите пункт «Параметры»;
- в параметрах системы перейдите в раздел «Обновление и безопасность», потом — в подраздел «Центр обновления Windows»;
- нажмите на кнопку «Проверка наличия обновлений»;
- дождитесь окончания установки обновлений.
Во время обновления Windows ваш ПК будет периодически перезагружаться — это нормально.
Решение №5 Деактивация антивируса и внесение EAC в список исключений брандмауэра
Периодически антивирусы могут препятствовать работе EAC. Делают это, к сожалению, не только сторонние программы, но и системные средства. Чтобы отключить активную защиту антивируса Windows, нужно сделать следующее:
- нажмите комбинацию WIN+S для вызова поисковой строки;
- пропишите запрос «Безопасность Windows» и выберите найденный результат;
- перейдите в подраздел «Защита от вирусов и угроз» и кликните там на пункт «Управление настройками»;
- найдите опцию «Защита в режиме реального времени» и деактивируйте ее, выставив значение «Откл.».
Понятное дело, с отключение стороннего антивируса вам придется разбираться самостоятельно. Активную защиту многих антивирусов можно отключить через значок в трее панели задач.
Также рекомендуется внести EAC в список исключений брандмауэра. В системном варианте ПО это делается следующим образом:
- откройте «Параметры» и перейдите в раздел «Конфиденциальность и защита»;
- выберите подраздел «Брандмауэр и безопасность сети»;
- кликните на пункт «Разрешить работу с приложением через брандмауэр»;
- в новом окошке найдите (или добавьте при необходимости) EasyAntiCheat;
- поставьте рядом с программой галочки возле «Частных» и «Публичных» сетей;
- сохраните изменения и закройте окна.
После деактивации антивируса и выдачи разрешения в брандмауэре запустите проблемную игру и проверьте наличие «Служба Easy Anti Cheat не установлена».
Источник: gamesqa.ru