Доступ к архиву

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

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

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

Античит на AirBreak

Статус
В этой теме нельзя размещать новые ответы.

Max_Hank

Умник
Всем привет! Вот вам античит на AirBreak. У меня все работает. Итак приступим.

Ко всем new:

PHP:
new TimeLogged[MAX_PLAYERS];
new PlayerLogged[MAX_PLAYERS];
В enum pInfo добавим:

PHP:
Float: pPos_x,
Float: pPos_y,
Float: pPos_z
Теперь в OnPlayerRequestClass:

PHP:
SetPVarInt(playerid, "AntiBreik", 500);
TimeLogged[playerid] = 0;
Затем в OnPlayerSpawn (в самое начало):

PHP:
SetPVarInt(playerid, "AntiBreik", 3);
PlayerLogged[playerid] = true;
TimeLogged[playerid] = -1;
В OnGameModeInit добавляем таймер проверки:

PHP:
SetTimer("onCheckAirBrk", 1000, 1); // проверка каждую секунду
Добавим функции в конец мода:

PHP:
stock t_SetPlayerPos( playerid, Float:x, Float:y, Float:z )
{
    SetPlayerPos( playerid, x, y, z );
    PlayerInfo[ playerid ][ pPos_x ] = x;
    PlayerInfo[ playerid ][ pPos_y ] = y;
    PlayerInfo[ playerid ][ pPos_z ] = z;
    SetPVarInt(playerid, "AntiBreik", 3);
    return true;
}
Добавим вот такой дефайн:

PHP:
#define SetPlayerPos t_SetPlayerPos
Функция выявления читера:

PHP:
stock onCheckAirBrk( playerid )
{
    if( IsPlayerConnected( playerid ) )
    {
    	new Float:currentPos[ 3 ],
            Float:distance;
        GetPlayerPos( playerid, currentPos[ 0 ], currentPos[ 1 ], currentPos[ 2 ] );
        distance = floatround( GetPlayerDistanceFromPoint( playerid, PlayerInfo[ playerid ][ pPos_x ], PlayerInfo[ playerid ][ pPos_y ], PlayerInfo[ playerid ][ pPos_z] ) );
		if(GetPVarInt(playerid, "AntiBreik") == 0 && GetPVarInt(playerid, "AFK_Time") < 2) // проверка на АФК, редактируйте по себя
		{
	        if(distance < 100 && distance > 70)
	        {
	        format(string, 256, "[!WARNING!] Игрок %s (ID: %i) подозревается в читерстве (Аирбрайк или ТП)", sendername(playerid), playerid);
            SendAdminMessage(COLOR_LIGHTRED, string); //Предупреждаем админов.
	        }
        }
        PlayerInfo[ playerid ][ pPos_x ] = currentPos[ 0 ];
        PlayerInfo[ playerid ][ pPos_y ] = currentPos[ 1 ];
        PlayerInfo[ playerid ][ pPos_z ] = currentPos[ 2 ];
    }
}
Далее функция, которая позволяет отправлять админам сообщения. pAdmin - это ЛВЛ админа. Редактируем под себя!

PHP:
stock SendAdminMessage(color, str[])
{
	for(new i = 0; i < GetMaxPlayers(); i++)
	{
	    if(!IsPlayerConnected(i) || PlayerLogged[i] == 0) continue;
		if(PlayerInfo[i][pAdmin] > 0 && SendAdmin[i]) SendClientMessage(i, color, str);
	}
	return true;
}
Ну вот и все. Сильно не бейте. От +сиков не откажусь. Всего вам доброго друзья. Выявите ошибку, пишите сюда, делал на скоряк, мож что-то забыл
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу