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

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

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

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

Учимся создовать ворота с паролем

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

sasa50

Умник
Здравствуйте, в этом уроке я расскажу вам как создать ворота с паролем, приступим:

Для начала нам нужно добавить ко всем new:
PHP:
new passwordtry[MAX_PLAYERS];//
new tgate;//
new gate[2];//
new timegate[2];//
new PlayerTazeTime[MAX_PLAYERS];//
new BigEar[MAX_PLAYERS];//Потом ко всем forward:
и ко всем forward
PHP:
forward GateClose();//
forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);//
Потом в enum pInfo есть ли эта строчка:
PHP:
pMasked
,если нет, то добавьте
После этого создаем ворота в public OnGameModeInit:
PHP:
gate[1] = CreateObject(980,-2666.4956054688,578.00079345703,16.234399795532,0,0,0); //
Где 980,-2666.4956054688,578.00079345703,16.234399795532,0,0,0 Это коорденаты и поворот ворот как будут открываться
Далее добавляем команду в public OnPlayerCommandText:
PHP:
if(tgate == 0)
{
if(strcmp(cmdtext,"/gate",true)==0)
{
if(PlayerToPoint(2,playerid,-2671.8264,577.6049,14.4593))
{
ShowPlayerDialog(playerid,110,DIALOG_STYLE_INPUT,"Password ","Введите пароль, чтобы открыть ворота","Принять","Отмена");  
return 1;
}
else
{
MoveObject(gate[1], -2666.4956054688,578.00079345703,16.234399795532, 1.5);
tgate=0;
return 1;
}
}
}Далее идем в public OnDialogResponse и добавляем это:
PHP:
     new sendername[MAX_PLAYER_NAME];
     new string[128];
     if(dialogid == 110)
   {
       new password;
        password = strval(inputtext);
         if(!strval(inputtext))
       {
        ShowPlayerDialog(playerid, 110, DIALOG_STYLE_INPUT, "Введите пароль", "Введите пароль, чтобы открыть двери:", "Ввод", "Отмена");
        return 1;
     }
       if(password == 7777)// Это какой пароль должен ввести игрок
       {
       GetPlayerName(playerid, sendername, sizeof(sendername));
       if(PlayerInfo[playerid][pMasked] == 1) { format(string, sizeof(string), "* Незнакомец вводит пароль."); }
       else{ format(string, sizeof(string), "* %s вводит пароль", sendername); }
       ProxDetector(15.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
       MoveObject(gate[1], -2666.4956054688,578.00079345703,10.234399795532, 1.5);
       tgate = 1;
       timegate[1] = SetTimer("GateClose", 10000, 0);//  
             SendClientMessage(playerid, COLOR_GREEN,"*Ворота закроются через 10 секунд.");
      }
      else
      {
          GetPlayerName(playerid, sendername, sizeof(sendername));
        format(string, sizeof(string), "* Замок пронзительно запищал (( %s ))", sendername);
        ProxDetector(15.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
          ShowPlayerDialog(playerid, 110, DIALOG_STYLE_INPUT, "INFO", "Пароль введён неверно!\nПовторите попытку или проваливайте отсюда!", "Приять", "Отмена");
          passwordtry[playerid]++;
          if(passwordtry[playerid] >=3)
          {
              SendClientMessage(playerid, COLOR_GREY, "Вас ударило током!");
              GetPlayerName(playerid, sendername, sizeof(sendername));
         format(string, sizeof(string), "* На замке срабатывает защита от взлома (( %s ))", sendername);
         ProxDetector(15.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
              PlayerTazeTime[playerid] = 1;
              passwordtry[playerid] = 0;
      }
}
      return 1;
     }
В самый конец добавляем это:
PHP:
public GateClose()
{
MoveObject(gate[1],-2666.4956054688,578.00079345703,16.234399795532, 2.0);
tgate = 0;
return 1;
}

public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
  if(IsPlayerConnected(playerid))
  {
   new Float:posx, Float:posy, Float:posz;
   new Float:oldposx, Float:oldposy, Float:oldposz;
   new Float:tempposx, Float:tempposy, Float:tempposz;
   GetPlayerPos(playerid, oldposx, oldposy, oldposz);
   //radi = 2.0; //Trigger Radius
   for(new i = 0; i < MAX_PLAYERS; i++)
   {
    if(IsPlayerConnected(i))
    {
     if(!BigEar[i])
     {
      GetPlayerPos(i, posx, posy, posz);
      tempposx = (oldposx -posx);
      tempposy = (oldposy -posy);
      tempposz = (oldposz -posz);
      //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
      new wp = GetPlayerVirtualWorld(playerid);
      new wi = GetPlayerVirtualWorld(i);
      if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)) && wp == wi)
      {
       SendClientMessage(i, col1, string);
      }
      else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)) && wp == wi)
      {
       SendClientMessage(i, col2, string);
      }
      else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)) && wp == wi)
      {
       SendClientMessage(i, col3, string);
      }
      else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)) && wp == wi)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу