Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Анти Телепорт,AirBrak,Телепорт по карте все в одном, абсол бес ложн выз

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 %
 
Сверху Снизу