[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Pawno-Урок]Anti приклеивания
Дата: 17.07.2011, Воскресенье, 09:39:30 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 134
Репутация: 74+
В этом уроке пойдёт реч о создании защиты от NOP PutPlayerInVehicle(насильно запихнуть в машину игрока)(NOP - как бы вырозется не дать так сделать:D)
оформления не ждите но расписывать отвечать на вопросы буду.Разумная критика приветсвуется тролинг и безосновательные оскорбления игнорируются.
WARING !!! В коде могут быть ошибки писал на сонную голову:)
Code
//перменные.Вписываем в начало вашего мода(после #include'ов:D как бы странно не звучало
new Status[MAX_PLAYERS];//Создаём масив с количеством ячеек равным максимальному онлайну т.е 500 ячеек(500 ID игроков)
//Масив выше прослеживает какой статус у игрока ONFOOT(на земле) DRIVER (водитель) PASSAGIRE(пасажир)
new CheckStat;//Переменная которая будет хранить ID таймера
new bool:putvehicle[MAX_PLAYERS] = false;//создаём переменную типа bool(2 значения true/false(истина /лож)
forward CheckStatus();
#define PutPlayerInvehicle PutPlayerInVehicleEx//потом узнаете
#define RemovePlayerFromVehicle RemovePlayerFromVehicleEx //тоже потом
//----------------------------------


Переменные добавлены теперь обьявим наш public CheckStatus таймером
для этого:
в public OnGameModeInit() добавляем
Code
CheckStat = SetTimer ("CheckStatus", 1000,1);//присваиваем переменной CheckStat ид таймера который мы создали.в SetTimer 100 это милисекунды (интервал с которым он будет выполнятся).1 это цикличное повтарение(0 это только 1 раз выполнится)


Теперь мы создали Timer Но чтоже с ним делать
Code
public CheckStatus()
{
     for(new i = 0; i < GetMaxPlayers; i++)
     {
         StatusCheck(i)
     }
}


Естественно что StatusCheck функция не стандартная по этому создадим её
Code
Stock StatusCheck(playerid)//функция проверки статуса для игрока(ну не совсем повторяю я сонный:D)
{
new string[MAX_STRINGS];
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)//если он на ногах стоит
{
         if(putvehicle[playerid] = true;//если он принудительно должен быть в машине
         {
             format(string,sizeof(string), "%s[%d] was kicked reson stick to the floor", PlayerName(playerid),playerid);
             ABroadCast(вашцвет, string, 1);
             Kick(playerid);
         }
         else putvehicle[playerid] = false;
         if(Status[playerid] >=1);//если он на ногах и при этом пасажир или водитель(что не возможно
         {
             format(string,sizeof(string),"%s[%d] Status Error !Check This!",PlayerName(playerid),playerid);
             ABroadCast(вашцвет,string, 1);
         }
         format(string,sizeof(string),"%s[%d] Was Kicked by CEPBEP, resone: Stick to the flore",GetPlayerName(playerid),playerid);//:D не смеяцо меняем на свою
         Kick(playerid);
         ABroadCast(вашцвет,string,1);//у кого нету пишите если у вас админка не ркон то подстрою функцию под вас!
     }
}
if(GetPlayerState == PLAYER_STATE_DRIVER)//Если игрок водитель
{
     if(Status[playerid] !=1)//если не водитель по статусу
     {
         format(string,sizeof(string, "%s[%d] Was kicked by CEPBEP, reson: sticking to driver place!");
         ABroadCast(вашцвет,string, 1);
         Kick(playerid);
     }
}
if(GetPlayerState == PLAYERSTATE_PASSAGIRE)//если пасажир
{
     if(Status[playerid] !=2)//если игрок не посажир по статусу
     {
         format(string,siceof(string), "%s[%d] Was kicked by CEPBEP,reson: sticking to passagire place");
         ABroadCast(ваш цвет ,string, 1);
         Kick(playerid);
     }
}
}


В public OnPlayerStateChange
Code
//в public OnPlayerStateChange
{
     if(newstate == PLAYER_STATE_ONFOOT)
     {
         Status[playerid] = 0;//на ногах статус
     }
     if(newstate == PLAYER_STATE_DRIVER)
     {
         Status[playerid] = 1;//статус водителя
     }
     if(newstate == PLAYER_STATE_PASSAGIRE)
     {
         Status[playerid] = 2;
     }
}


И без этого тоже
Code
Stock RemovePlayerFromVehicleEx(playerid)
{
     RemovePlayerFromVehicle(playerid);
     Status[playerid] = 0;
}
Stock PutPlayerInVehicleEx(playerid,vehicleid,seatid)
{
     putvehicle[playerid] = true;
     PutPlayerInVehicleEx(playerid,vehicleid,seatid);
}

Автор: Alex1994 & Jon_Shepart
Дата: 19.07.2011, Вторник, 17:01:40 | Сообщение # $NUMBER
Группа: Модераторы
Сообщений: 1045
Репутация: 1112+
DmX, spam off
  • Страница 1 из 1
  • 1
Поиск: