Представляю вам, античит на антизаморозку в собейте и любых других читах. Теоретически он должен работать, я не проверял честно говоря, ввиду отсутствия сервера.
Первый этап, ко всем new (глобальным переменным) добавим:
Код
new Float: togX[MAX_PLAYERS], Float:togY[MAX_PLAYERS], togZ[MAX_PLAYERS]; new bool: togglePlayer[MAX_PLAYERS];
Второй этап, в public OnPlayerConnect инициализируем переменные:
Третий этап, создадим новую функцию заморозки/разморозки:
Код
forward TogglePlayerControllableEx(playerid, bool:toggle); // Добавьте ко всем forward если вы соблюдаете чистоту кода <img src="http://s101.ucoz.net/sm/6/biggrin.gif" border="0" align="absmiddle" alt="biggrin" /> public TogglePlayerControllableEx(playerid, bool:toggle) { TogglePlayerControllable(playerid,toggle); GetPlayerPos(playerid, togX[playerid],togY[playerid],togZ[playerid]); togglePlayer[playerid] = toggle; return toggle; }
Заключительный этап, добавим проверочный код в односекундный паблик, например Fresh если у вас rls мод, или любой другой если у вас другой мод:
Код
public Fresh() { if(!togglePlayer[playerid]) { new Float: X, Float: Y, Float: Z; GetPlayerPos(playerid,X,Y,Z); if(X != togX[playerid] && Y != togY[playerid]) { SendAdminMessage(-1,"Сообщение админам"); // Отправляем сообщение админа Kick(playerid); // Ну или можно кикнуть игрока } } }
Использование функции:
Функция используется точно также как стандартная, она лишь немного имеет другой вид:
Код
TogglePlayerControllable(playerid,0); // Стандартная функция TogglePlayerControllableEx(playerid,0); // Защищенная функция
Теперь можете по желанию, либо заменить вручную/автозаменой все стандарные функции на защищенные, либо написать макрос через #define;
Пожалуйста отпишитесь, если у вас возникнут проблемы при работе с данной функцией, я её не проверял, или же если функция отлично работает.