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

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

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

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

на антизаморозку

Mr Green

Новичок
Приветствую пользователей pawno-info.ru

Представляю вам, античит на антизаморозку в собейте и любых других читах.
Теоретически он должен работать, я не проверял честно говоря, ввиду отсутствия сервера.

Первый этап, ко всем new (глобальным переменным) добавим:

PHP:
new Float: togX[MAX_PLAYERS], Float:togY[MAX_PLAYERS], togZ[MAX_PLAYERS];
new bool: togglePlayer[MAX_PLAYERS];
Второй этап, в public OnPlayerConnect инициализируем переменные:
PHP:
togX[playerid] = 0;
	togY[playerid] = 0;
	togZ[playerid] = 0;
	togglePlayer[playerid] = true;
Третий этап, создадим новую функцию заморозки/разморозки:
PHP:
forward TogglePlayerControllableEx(playerid, bool:toggle); // Добавьте ко всем forward если вы соблюдаете чистоту кода :D
public TogglePlayerControllableEx(playerid, bool:toggle) {
switch(GetPlayerState(playerid))
	{    
	case PLAYER_STATE_DRIVER,PLAYER_STATE_PASSENGER: TogglePlayerControllable(playerid,toggle), return toggle; // если игрок в машите то замораживаем его обычным способом
	case PLAYER_STATE_NONE, PLAYER_STATE_SPECTATING: return toggle; // если игрок находится в наблюдении его нельзя заморозить
	}
	// если игрок стоит на земле/воздухе то замораживаем его защищенной функцией
	TogglePlayerControllable(playerid,toggle);
    GetPlayerPos(playerid, togX[playerid],togY[playerid],togZ[playerid]);
    togglePlayer[playerid] = toggle;
    return toggle;
}
Заключительный этап, добавим проверочный код в односекундный паблик, например Fresh если у вас rls мод, или любой другой если у вас другой мод:
PHP:
public Fresh()
{
    if(!togglePlayer[playerid]) {
        new Float: X, Float: Y, Float: Z;
        GetPlayerPos(playerid,X,Y,Z);
        if(X != togX[playerid] && Y != togY[playerid]) {
	    switch(GetPlayerState(playerid))
		{
			case PLAYER_STATE_SPAWNED,PLAYER_STATE_WASTED: togglePlayer[playerid] = true, break; // если игрока заспавнит админ, в состоянии замороженности
			case PLAYER_STATE_ONFOOT: {
					    // Ваши действия при обнаружении читера
				            SendAdminMessage(-1,"Сообщение админам"); // Отправляем сообщение админа
            				    Kick(playerid); // Ну или можно кикнуть игрока
			}
		} 
        }
    }
}
Использование функции:

Функция используется точно также как стандартная, она лишь немного имеет другой вид:

PHP:
TogglePlayerControllable(playerid,0); // Стандартная функция
TogglePlayerControllableEx(playerid,0); // Защищенная функция
Теперь можете по желанию, либо заменить вручную/автозаменой все стандарные функции на защищенные, либо написать макрос через #define;

Пожалуйста отпишитесь, если у вас возникнут проблемы при работе с данной функцией, я её не проверял, или же если функция отлично работает.

UPD: v.1.0.1
- Если игрок в наблюдении его нельзя заморозить, введено чтобы небыло недразумений
- Теперь если игрок в машине, его будет замораживать обычной функцией, иначе защищенной
- Если игрока заспавнили в "замороженном" состоянии, то его античит обойдет

Возможны ошибки, т.к. я пишу данный античит без сервера/игры, у меня нет возможности проверить, если у Вас есть желание помочь в проверке пишите буду рад!


Спасибо за внимание!

Автор: Mr.Green
 
Последнее редактирование:
Сверху Снизу