Alex_Lenez
Специалист
Античит
И так пред история: Я хотел сделать анти телепорт который никогда не дает ложных вызовов ( То есть случайно не того кикнет ).
Самому не хотелось писать, искал его на форуме есть парочка подходящих вариантов но там возможно что кикнет просто так или очень большой код. Я сделал очень легкую и простою проверку 10 строк всего!
И так начнем:
Ко всем new:
PHP:
new Float:TelX[MAX_PLAYERS],Float:TelY[MAX_PLAYERS],Float:TelZ[MAX_PLAYERS];
new TeleTime[MAX_PLAYERS];
new bool:TelePosit[MAX_PLAYERS];
В любой таймер который обновляется 1 раз в 5 секунд!
PHP:
foreach(new i: Player)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(i, X, Y, Z);
if(X < TelX[i]-50 || X > TelX[i]+50 || Y < TelY[i]-50 || Y > TelY[i]+50)
{
if(GetPlayerState(i)==PLAYER_STATE_ONFOOT)
{
if(TelePosit[i] == true)
{
TeleTime[i]--;
if(TeleTime[i] <= 0)
{
TelePosit[i] = false;
}
}
else
{
SendClientMessage(i, COLOR_LIGHTRED,"Ваш игровой сеанс был завершен в связи с подозрением в читерстве");
SendClientMessage(i, COLOR_LIGHTRED,"Код события: #0028 ( Телепорт )");
SendClientMessage(i, COLOR_LIGHTRED,"Чтобы продолжить игру на сервере, пожалуйста, удалите сторонние программы!");
SendClientMessage(i, COLOR_LIGHTRED,"Если Вы были кикнуты ошибочно, причиной этому явились пинг/лаги/моды/качество Интернет-связи");
SendClientMessage(i, COLOR_WHITE,"Введите /q для выхода");
GKick(i);
}
}
}
TelX[i] = X;
TelY[i] = Y;
TelZ[i] = Z;
}
Теперь чтобы не было ложных вызовов кидаем в OnPlayerConnect:
PHP:
TelePosit[playerid] = true;
TeleTime[playerid] = 2;
Дальше чтобы при спавне или телепорте админом не было ложных вызовов создадим в самом начале мода ( Ну почти перед любым стоком или пабликом )
PHP:
stock SetPlayerPos1(playerid, Float:PosX, Float:PosY, Float:PosZ)
{
TelePosit[playerid] = true;
TeleTime[playerid] = 1;
SetPlayerPos(playerid, PosX, PosY, PosZ);
return true;
}
Но есть одна проблема почему то замакросить это дело обратно в SetPlayerPos Не могу пишет ошибка в синтаксисе
Придется во всем моде кроме этого паблика заменить SetPlayerPos на SetPlayerPos1
Даже покажу как это сделать!
Для начала нажимаем на кнопку Replace, там вы видите два поля для ввода В первый ( верхний ) пишем слово SetPlayerPos А в нижний SetPlayerPos1 Нажимаем Ok. Нам показывает первое слово SetPlayerPos1 Его пропускаем также пропускаем и второе слово которое в этом стоке это SetPlayerPos ( Пропуcтить нажать на No ) Дальше просто нажимаем Yes To All ( Заменить все ) И все античит готов компилируем
Мануал/Урок был сделан только для того чтобы показать что не нужно делать очень умных античитов
За работоспособность ручаюсь 100 %
