Блокировка собейтом ф-ий сампа -
DANGER1979 - 25.08.2011
Т.к. играть на сервере с читерами я думаю ни кому не нравится, то я считаю написание античита совместными усилиями главное дело сообщества скриптеров павн.
Сам использую собейт только ради того, чтобы протестировать свои же античиты.
Но с недавних пор в собейте под версию сампа 0.3с появились дико классные для читеров фишки: блокировать любую ф-ию сампа на её выполнение.
И вот я при реализации одной из своих идей для решения проблем по игре, т.к. поступало много жалоб решил разобраться в одном вопросе.
Дело имеем с оружием полученным честным путём(Не путать с читерским оружием)
Допустим хотим запретить вход в интерьер с оружием или использовать оружия при отсутствии лицензии на огнестрельное оружие.
pawn Code:
getgun[playerid] = GetPlayerWeapon(playerid);
if( CheckFireArm(getgun[playerid]) && getgun[playerid] > 0)
{ //если у игрока нету лицки, то и огнестрельного оружия не должно быть
if(PlayerInfo[playerid][pGunLic] != 1)
{
if(peremCheckWeapon == 0)
{
SetPlayerArmedWeapon(playerid, 0);
if(GetPlayerWeapon(playerid) > 0)//проверяем убралось ли оружие
{//если не убралось, то в следующем шаге попробовать убрать оружием другим способом
peremCheckWeapon = 1; SendClientMessageToAll(COLOR_RED, "SetPlayerArmedWeapon");
}
}
else if(peremCheckWeapon == 1)
{
RemovePlayerWeaponEx(playerid, getgun[playerid]);
if(GetPlayerWeapon(playerid) > 0)
{
peremCheckWeapon = 2; SendClientMessageToAll(COLOR_RED, "RemovePlayerWeapon");
}
}
else if(peremCheckWeapon == 2)
{
ResetPlayerWeaponsEx(playerid);
if(GetPlayerWeapon(playerid) > 0)
{
peremCheckWeapon = 3; SendClientMessageToAll(COLOR_RED, "ResetPlayerWeapons");
}
}
else
{
SetPlayerHealthEx(playerid, 0);
if(GetPlayerWeapon(playerid) > 0)
{
peremCheckWeapon = 0; SendClientMessageToAll(COLOR_RED, "SetPlayerHealth");
}
}
}
}
Проблема:
1. Почему то GetPlayerWeapon(playerid) не срабывает в одном такте после отбирания оружия. Конечно можно ввести ещё один такт для проверки убралось ли оружие, но это в худшем случаи.
2. В итоге всё это не помогает, т.к. в собейте даже есть блокирование SetPlayerHealth. В итоге после этих всех проверок надо добавить кик или бан. Но это сделать нельзя покуда не найден способ проверить убралось ли действительно оружие, или эта ф-ия отбора оружия у игрока заблокирована собейтом.
3. Через некоторое время сражения собейта и античита, вообще оружие не даётся(даже не видно как оно отбирается и отбирается ли вообще) Античит вообще не ругается. Но ф-ия OnPlayerUpdate отрабатывает дальнейший код.
Re: Блокировка собейтом ф-ий сампа -
-Stranger- - 25.08.2011
Quote:
Сам использую собейт только ради того, чтобы протестировать свои же античиты.
|
Ой, зря Вы это сказали

Щас начнётся....
Про "
...написание античита совместными усилиями..." скажу так:
Разработчики этой ....... гадости не сидят на месте, и постоянно обновляют её. Стоит сделать хороший античит, как выйдет обновление чита. Поэтому каждый скриптер делает свой античит, и как он работает знает тока он один, и работать он будет до тех пор, пока не появиться в сети код античита.
PS: Моё сугубо личное мнение...
Re: Блокировка собейтом ф-ий сампа -
DANGER1979 - 25.08.2011
Думаю, что те кто пишут собейт далеко не дураки, что умудрились все ф-ии сампа заблокировать.
И им не нужно твои античиты, они сами лучше тебя античит напишут в 1000 раз, т.к. знают все слабые места собейта.
Поэтому молчание по этому поводу не решит проблему.
До сих пор я не видел, чтобы кто то глубоко обсуждал античиты. Причина скорее всего, что все хотят на этих античитах стрести бабок с малолетних школьников. Но при этом собейт прекрасно развивался.
Quote:
Поэтому каждый скриптер делает свой античит, и как он работает знает тока он один, и работать он будет до тех пор, пока не появиться в сети код античита.
|
Выложи свой античит и я пойму как он работает и на чём основан. Уловлю идею и на подобие напишу свой.
Re: Блокировка собейтом ф-ий сампа -
HappyScripter - 25.08.2011
Скриптово бороться с такими новинками все равно что пытаться пальцем по воде написать какое-то слово. Эффект есть, но очень недолгий. Собейт все хорошеет, а мультиплеер нет, страдает конечно качество и точность. С такой уже совершенно очевидной проблемой нужно обратится к разработчику мультиплеера.
Re: Блокировка собейтом ф-ий сампа -
DANGER1979 - 25.08.2011
Я думаю, что скоро в собейте будет блокировать команду кик и бан.
Вот тогда самп обкакается. И я тогда точно пошлю всё к чёртовой матери.
Re: Блокировка собейтом ф-ий сампа -
Borg - 25.08.2011
Собейт блокирует функции сампа, заменяя значение 1 переменной... это баг сампа... есть выход такой, как внешний античит, но не долгий... кик собейт точно блокировать не будет, так как кик - это закрытие udp соединения со стороны сервера... собейт же не на сервере...
Re: Блокировка собейтом ф-ий сампа -
Geryy - 25.08.2011
С этим делом надо шевелиться и разработчику сампа тоже, а то на защиту совсем забил.
Re: Блокировка собейтом ф-ий сампа -
-Stranger- - 26.08.2011
Geryy,согласен, стоит уделить немного больше времени защите. В версии R2 появилась защита от брута RCON и простых DoS атак, конечно от школьных программ, типа sамрfp и Rсоn-Раss спасает кое-как, но вот более грамотную атаку пропускает. Конечно не античит, но проблема тоже актуальная.
PS. Кому интересно, для защиты от брута, и DoS использую wipfw. 99% атак отбивает...
Re: Блокировка собейтом ф-ий сампа -
DANGER1979 - 26.08.2011
Степашка, знаю у тебя всегда есть оригинальные и простые идеи.
Предложи хоть одну, как отсечь людей, которые блокируют ф-ию SetPlayerArmedWeapon.
Re: Блокировка собейтом ф-ий сампа -
Stepashka - 26.08.2011
pawn Code:
new weaponId;
SetPlayerArmedWeapon(playerid, weaponId);
if(weaponId != GetplayerWeapon(playerid)) BanEx(playerid, "******");
Re: Блокировка собейтом ф-ий сампа -
DANGER1979 - 26.08.2011
ты уверен что в одном такте сработает?
это проверено или лишь твои мысли?
т.к. я проверял и заметил что GetplayerWeapon(playerid) возвращает оружие которое было до сброса если они идут в одном такте.
тот код что я выложил это не теория а на практике проверенный код
SetPlayerArmedWeapon(playerid, 0);
if(GetPlayerWeapon(playerid) > 0)
{
срабатывает всегда даже если нету читов. ПОЧЕМУ?
}
Re: Блокировка собейтом ф-ий сампа -
Stepashka - 26.08.2011
Могу вечером проверить, сейчас на работе.
Re: Блокировка собейтом ф-ий сампа -
HappyScripter - 26.08.2011
Quote:
Originally Posted by Stepashka
pawn Code:
new weaponId; SetPlayerArmedWeapon(playerid, weaponId); if(weaponId != GetplayerWeapon(playerid)) BanEx(playerid, "******");
|
Данные не успеют передаться туда и обратно. Два варианта. SetPlayerArmedWeapon меняет серверное значение текущего оружия игрока, которое потом сразу же читает GetPlayerWeapon. Никого этой проверкой не забанит. Вторая версия - SetPlayerArmedWeapon отправляет клиенту данные для смены оружия в то время как GetPlayerWeapon возвращает серверное значение текущего оружия клиента, полученное недавно от клиента. Эти значения почти всегда могут быть разными, потому что клиенту данные еще не дошли, а мы уже проверяем результат.
Такую проверку хорошо бы сделать в самом клиенте, а такой возможности нет.
Re: Блокировка собейтом ф-ий сампа -
Borg - 26.08.2011
Может стоит проверять через секунду после сброса?
Re: Блокировка собейтом ф-ий сампа -
DANGER1979 - 26.08.2011
HappyScripter, ты абсолютно прав.И я это знал давно, только так выразиться как ты не мог.
Просто думал, что кто нибудь подскажет решение.
Дело в том, что я уже как два года назад заметил что существует ряд ф-ий которые в одном такте не работают. Но раньше я находил решение, т.к. это было не связано с борьбой с читерами.
И вот на данном примере решил спросить нашёл ли кто решение этой проблемы. И как видимо ни кто не нашёл.
Re: Блокировка собейтом ф-ий сампа -
HappyScripter - 26.08.2011
Менять оружие можно в любом месте, но проверку нужно делать в OnPlayerUpdate(), а не сразу. Но это все мысли, на деле клиент может после смены переключить оружие и назад уже придут данные о другом оружии.
Re: Блокировка собейтом ф-ий сампа -
Stepashka - 26.08.2011
Quote:
Originally Posted by HappyScripter
GetPlayerWeapon возвращает серверное значение текущего оружия клиента
|
сервер не хранит значения клиентской стороны.
Re: Блокировка собейтом ф-ий сампа -
DANGER1979 - 26.08.2011
Вот пример таких ещё ф-ий.
AttachTrailerToVehicle и IsTrailerAttachedToVehicle не будут работать в одном такте
и т.д. есть ещё такие ф-ии. Счас сразу не вспомню
Re: Блокировка собейтом ф-ий сампа -
Borg - 26.08.2011
HappyScripter, а если этот апдейт будет с другими данными, то это тоже не получится... я думаю надо дать время, около секунды, а потом уже проверять... Но а если у клиента лаги? Все может быть...
Re: Блокировка собейтом ф-ий сампа -
HappyScripter - 26.08.2011
Quote:
Originally Posted by Borg
HappyScripter, а если этот апдейт будет с другими данными, то это тоже не получится... я думаю надо дать время, около секунды, а потом уже проверять... Но а если у клиента лаги? Все может быть...
|
перед изменением оружия запоминаем его ИД
меняем оружие
ждем в OnPlayerUpdate() изменения текущего оружия
возможно, изменения оружия будут не сразу, поэтому нужно ждать изменений в этой функции, постоянно проверяя текущее оружие