25.08.2011, 18:41
Т.к. играть на сервере с читерами я думаю ни кому не нравится, то я считаю написание античита совместными усилиями главное дело сообщества скриптеров павн.
Сам использую собейт только ради того, чтобы протестировать свои же античиты.
Но с недавних пор в собейте под версию сампа 0.3с появились дико классные для читеров фишки: блокировать любую ф-ию сампа на её выполнение.
И вот я при реализации одной из своих идей для решения проблем по игре, т.к. поступало много жалоб решил разобраться в одном вопросе.
Дело имеем с оружием полученным честным путём(Не путать с читерским оружием)
Допустим хотим запретить вход в интерьер с оружием или использовать оружия при отсутствии лицензии на огнестрельное оружие.
Проблема:
1. Почему то GetPlayerWeapon(playerid) не срабывает в одном такте после отбирания оружия. Конечно можно ввести ещё один такт для проверки убралось ли оружие, но это в худшем случаи.
2. В итоге всё это не помогает, т.к. в собейте даже есть блокирование SetPlayerHealth. В итоге после этих всех проверок надо добавить кик или бан. Но это сделать нельзя покуда не найден способ проверить убралось ли действительно оружие, или эта ф-ия отбора оружия у игрока заблокирована собейтом.
3. Через некоторое время сражения собейта и античита, вообще оружие не даётся(даже не видно как оно отбирается и отбирается ли вообще) Античит вообще не ругается. Но ф-ия OnPlayerUpdate отрабатывает дальнейший код.
Сам использую собейт только ради того, чтобы протестировать свои же античиты.
Но с недавних пор в собейте под версию сампа 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 отрабатывает дальнейший код.


Щас начнётся....