[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Pawno-Урок]Тест и практика В Автошколе
Дата: 26.02.2011, Суббота, 12:54:42 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 116
Репутация: 0+
Не встретил я этого урока, но если есть, то прошу удалить.
Итак начнем, в начало ко всем new
Code

new DrivingTest[MAX_PLAYERS];//начало теста
new Question1[MAX_PLAYERS]; //вопрос1
new Question2[MAX_PLAYERS]; //вопрос2
new Question3[MAX_PLAYERS]; //вопрос3
new Question4[MAX_PLAYERS]; //вопрос4
new Question5[MAX_PLAYERS]; //вопрос5, в принципе их можно сделать сколько угодно.
new Owibka[MAX_PLAYERS]; //ошибка в автошколе, если человек, допустил ошибку
new Practice[MAX_PLAYERS];//Ну и практика по Чекпоинтам.

Вставим теперь команду. в public OnPlayerCommandText
Code
if(strcmp("/taketest", cmd, true) == 0)
       {
           if(PlayerToPoint(1.5, playerid, 1173.3295,1348.3557,10.9219))//Координаты, где будет прописываться команда.
           {
               if(PlayerInfo[playerid][pCarLic] == 1)
               {
                   SendClientMessage(playerid, COLOR_WHITE, "У Вас уже есть права категории 'B'!");
                   return 1;
               }
               if(DrivingTest[playerid] == 1)
               {
                   SendClientMessage(playerid, COLOR_WHITE, "Вы уже сдаёте на права категории 'B'!");
                   return 1;
               }
               DrivingTest[playerid] = 1;
               SendClientMessage(playerid, COLOR_GREEN, "_____________Теория_____________");
               SendClientMessage(playerid, COLOR_GREY, "Вам будет задано несколько вопросов.");
               SendClientMessage(playerid, COLOR_GREY, "У вас есть право на 1 ошибку.");
               ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 1: Максимальная Скорость в штате","60\n90\n120","Ок","Отмена");
               Question1[playerid] = 1;
           }
       }

Теперь, поставим диалоги, в public OnDialogResponse
Code
if(dialogid == test1)//Вопросы пдд
    {
        if(!response)
        {
       SendClientMessage(playerid, COLOR_RED, "Вы провалили тест");
         DrivingTest[playerid] = 0;
         Question1[playerid] = 0;
         Question2[playerid] = 0;
         Question3[playerid] = 0;
         Question4[playerid] = 0;
         Question5[playerid] = 0;
         Owibka[playerid] = 0;
      return 1;
     }
     if(DrivingTest[playerid] > 0)
     {
         if(Question1[playerid] == 1)
         {
             if(listitem == 0)
          {
              EmptyMessages(playerid, 5);
              SendClientMessage(playerid, COLOR_GREEN,      "Верно. Следующий вопрос");
              ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 2: Максимальная Скорость на автомагистрелях","90\n120\n140","Ок","Отмена");
              Question1[playerid] = 0;
        Question2[playerid] = 1;
        return 0;
          }
          else
          {
              if(Owibka[playerid] == 1)
              {
                  SendClientMessage(playerid, COLOR_RED, "Вы провалили тест");
                  DrivingTest[playerid] = 0;
                  Question1[playerid] = 0;
                  Question2[playerid] = 0;
                  Question3[playerid] = 0;
                  Question4[playerid] = 0;
                  Question5[playerid] = 0;
                  Owibka[playerid] = 0;
           
                  return 0;
              }
              else
              {
                  Owibka[playerid] = 1;
                  SendClientMessage(playerid, COLOR_RED,   "Не Верно.");
                  SendClientMessage(playerid, COLOR_RED,   "Ещё 1 одна ошибка и Вы провалите тест");
                  ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 2: Максимальная Скорость на автомагистрелях","90\n120\n140","Ок","Отмена");
                  return 0;
              }
          }
         }
         if(Question2[playerid] == 1)
         {
               if(listitem == 1)
             {
                 EmptyMessages(playerid, 5);
              SendClientMessage(playerid, COLOR_GREEN,      "Верно. Следующий вопрос");
              ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 3: Максимальая Скорость за городом","120\n100\n90","Ок","Отмена");
              Question2[playerid] = 0;
        Question3[playerid] = 1;
        return 0;
       }
       else
       {
           if(Owibka[playerid] == 1)
              {
                  SendClientMessage(playerid, COLOR_RED, "Вы провалили тест");
                  DrivingTest[playerid] = 0;
                  Question1[playerid] = 0;
                  Question2[playerid] = 0;
                  Question3[playerid] = 0;
                  Question4[playerid] = 0;
                  Question5[playerid] = 0;
                  Owibka[playerid] = 0;
                     
                  return 0;
              }
              else
              {
                  Owibka[playerid] = 1;
                  SendClientMessage(playerid, COLOR_RED,    "Не Верно.");
                  SendClientMessage(playerid, COLOR_RED,    "Ещё 1 одна ошибка и Вы провалите тест");
                  ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 3: Максимальая Скорость за городом","120\n100\n90","Ок","Отмена");
                  return 0;
              }
       }
         }
         if(Question3[playerid] == 1)
         {
             if(listitem == 2)
             {
                 EmptyMessages(playerid, 5);
              SendClientMessage(playerid, COLOR_GREEN,      "Верно. Следующий вопрос");
              ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 4: Что вы сделаете если увидите cзади машину\nс спец.маячками/сиренами","Остановлюсь у обочины\nПрижмусь в крайний ряд и поеду прямо сбросив скорость\nПоеду как ехал","Ок","Отмена");
           Question3[playerid] = 0;
        Question4[playerid] = 1;
        return 0;
             }
             else
             {
                 if(Owibka[playerid] == 1)
              {
                  SendClientMessage(playerid, COLOR_RED, "Вы провалили тест");
                  DrivingTest[playerid] = 0;
                  Question1[playerid] = 0;
                  Question2[playerid] = 0;
                  Question3[playerid] = 0;
                  Question4[playerid] = 0;
                  Question5[playerid] = 0;
                  Owibka[playerid] = 0;
                    
                  return 0;
              }
              else
              {
                  Owibka[playerid] = 1;
                  SendClientMessage(playerid, COLOR_RED,   "Не Верно.");
                  SendClientMessage(playerid, COLOR_RED,   "Ещё 1 одна ошибка и Вы провалите тест");
                  ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 4: Что вы сделаете если увидите cзади машину с спец.маячками/сиренами","Остановлюсь у обочины\nПрижмусь в крайний ряд и поеду прямо сбросив скорость\nПоеду как ехал","Ок","Отмена");
                  return 0;
              }
             }
         }
         if(Question4[playerid] == 1)
         {
               if(listitem == 1)
          {
              EmptyMessages(playerid, 5);
            SendClientMessage(playerid, COLOR_GREEN,      "Верно. Следующий вопрос");
                       ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 5: Водитель обгоняемого Автомобиля обязан","Снизить скорость\nдвигаться с прежней или большей скор.\nдвигаться с прежней или меньшей скор.","Ок","Отмена");
        Question4[playerid] = 0;
        Question5[playerid] = 1;
        return 0;
          }
          else
          {
              if(Owibka[playerid] == 1)
              {
                  SendClientMessage(playerid, COLOR_RED, "Вы провалили тест");
                  DrivingTest[playerid] = 0;
                  Question1[playerid] = 0;
                  Question2[playerid] = 0;
                  Question3[playerid] = 0;
                  Question4[playerid] = 0;
                  Question5[playerid] = 0;
                  Owibka[playerid] = 0;
                     
                  return 0;
              }
              else
              {
                  Owibka[playerid] = 1;
                //  SendClientMessage(playerid, COLOR_GREEN, "_____________Теория_____________");
                  SendClientMessage(playerid, COLOR_RED,   "Не Верно.");
                  SendClientMessage(playerid, COLOR_RED,   "Ещё 1 одна ошибка и Вы провалите тест");
                  ShowPlayerDialog(playerid,test1,DIALOG_STYLE_LIST,"Вопрос 5: Водитель обгоняемого Автомобиля обязан","Снизить скорость\nдвигаться с прежней или большей скор.\nдвигаться с прежней или меньшей скор.","Ок","Отмена");
                  return 0;
              }
          }
         }
         if(Question5[playerid] == 1)
         {
             if(listitem == 2)
             {
                 EmptyMessages(playerid, 5);
                 SendClientMessage(playerid, COLOR_GREEN,     "_____________Теория_____________");
            SendClientMessage(playerid, COLOR_LIGHTGREEN, "Перейдем к практике.");
             SendClientMessage(playerid, COLOR_LIGHTGREEN, "Выйдете на улицу и сядте в учебный автомобиль");
              SendClientMessage(playerid, COLOR_LIGHTGREEN, "Едте по чепоинтам аккуратно.");
              Question5[playerid] = 0;
        Practice[playerid] = 1;
        //TogglePlayerControllable(playerid, true);
        return 0;
             }
             else
             {
                    if(Owibka[playerid] == 1)
              {
                  SendClientMessage(playerid, COLOR_RED, "Вы провалили тест");
                  DrivingTest[playerid] = 0;
                  Question1[playerid] = 0;
                  Question2[playerid] = 0;
                  Question3[playerid] = 0;
                  Question4[playerid] = 0;
                  Question5[playerid] = 0;
                  Owibka[playerid] = 0;
                    
                  return 0;
              }
              else
              {
                  Owibka[playerid] = 1;
              //    SendClientMessage(playerid, COLOR_GREEN, "_____________Теория_____________");
                  SendClientMessage(playerid, COLOR_RED,   "Не Верно.");
                  SendClientMessage(playerid, COLOR_RED,   "Ещё 1 одна ошибка и Вы бы провалили бы тест");
                         EmptyMessages(playerid, 5);
                  SendClientMessage(playerid, COLOR_GREEN,     "_____________Теория_____________");
             SendClientMessage(playerid, COLOR_LIGHTGREEN, "Поздравляем.");
              SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы сдали Теоритический тест на категорию 'b'");
               SendClientMessage(playerid, COLOR_LIGHTGREEN, "Пройдите на парковку и возьмите учебную машину.");
               Question5[playerid] = 0;
               DrivingTest[playerid] = 0;
               Practice[playerid] = 1;
              }
             }
         }
      }
        return 1;
    }

Как вы видите, если человек правильно отвечает или с одной ошибкой, его просят пройти к учебной машине, когда он сядет в неё, нам надо, что бы высветился первый чекпоинт и не выкинуло игрока из машины.
Давайте попробуем!
Здесь у вас скорее всего, будет другая переменная, поэтому не ищите эту, найти эти строки, проще, написав, "Вы не лицензер" или что-то на подобии.
Code
if(IsAnAutoSchoolCar(newcar))
     {
         if(!(PlayerInfo[playerid][pLeader] == 11 || PlayerInfo[playerid][pMember] == 11 || Practice[playerid] == 1))

Как вы видите мы добавляем туда || Practice[playerid] == 1, это для того что бы игрок мог сесть в машину после сдачи теста. (Значок || обозначает "или")
Продолжим...
Теперь отправим его на чекпоинт... Ищем переменную, отвечающую за все автомобили категории Driving или B.
У меня он выглядит так:
Code
else if(IsACarB(newcar))
     {
      if(PlayerInfo[playerid][pCarLic] < 1)
      {
        if(Practice[playerid] == 1)//Как вы видите, мы поставили проверку на практику, и если она есть, то отправляем на чекпоинт.
        {
                     SendClientMessage(playerid,COLOR_LIGHTBLUE,"* Тест начался! Следуйте к маячку на радаре.!");
                     SetPlayerCheckpoint(playerid,1135.3571,-1705.7531,13.7644,6.0);
                     CP[playerid] = 160;
                     }
            else
             {
                    SendClientMessage(playerid,COLOR_GREY,"* У вас нет лицензии на вождение!");
                     RemovePlayerFromVehicle(playerid);
                    FreezePlayerVeh(playerid,0);

          }
                 }
      }

Продолжаем...
Code
if(IsACarB(newcar))
      {
       if(PlayerInfo[i][pCarLic] < 1 && IsPlayerInAnyVehicle(i) && GetPlayerState(i) == 2)
       {
        if(!(TakingLesson[i] == 1 || Practice[i] == 1))//Здесь мы также поставили проверку
           {
            RemovePlayerFromVehicle(i);
            FreezePlayerVeh(i,0);
        }
       }

Ставим чекпоинты в public OnPlayerEnterCheckpoint(playerid)


если кто-то будет ставить себе, то добавляйте ещё один паблик, если его у вас ещё нет:
Code
public EmptyMessages(playerid, count)
{
       for (new i = 0; i < count; i++)
       {
     SendClientMessage(playerid, 0, "\n");
    }
}

И естественно ко всем forward"ам:
forward EmptyMessages(playerid, count);
Система должна полностью работать.

когда, вставляете чекпоинты, переменную IsAnAutoSchoolCar, замените на свою.

Дата: 26.02.2011, Суббота, 13:50:49 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 50
Репутация: 123+
Оформить по правилам.
Дата: 26.02.2011, Суббота, 14:23:30 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 114
Репутация: 262+
ffm, а он уже не может изменить, у него группа не та CRAZY
Дата: 26.02.2011, Суббота, 19:42:08 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 116
Репутация: 0+
ok Раз не по правилам, то прошу удалить.
Дата: 26.02.2011, Суббота, 20:59:11 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 667
Репутация: 1425+
Подредактировал, в следующий раз, прошу всё делать по правилам.
Дата: 26.02.2011, Суббота, 21:28:02 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 117
Репутация: 134+
уже гдето видел этот урок и там я тоже написал что урок полное УГ.
зачем делать?
Quote
new Question1[MAX_PLAYERS]; //вопрос1
new Question2[MAX_PLAYERS]; //вопрос2
new Question3[MAX_PLAYERS]; //вопрос3
new Question4[MAX_PLAYERS]; //вопрос4
new Question5[MAX_PLAYERS]; //вопрос5, в принципе их можно сделать сколько угодно.

если можно Question[playerid] = 1; = 2; и т.д
Дата: 27.02.2011, Воскресенье, 16:01:13 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 67
Репутация: 11+
хороший урок
Дата: 27.02.2011, Воскресенье, 18:09:50 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 116
Репутация: 0+
misha_konsta, Спасибо
lopik, Каждый делает по своему, не спорю урок такой может и был, но только с теоретической частью, а здесь вместе с практической, урока с практической частью, я в свое время нигде не нашел, поэтому и написал.
Дата: 27.02.2011, Воскресенье, 18:14:55 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 44
Репутация: 49+
вырезал из GoldenMean -1
Amigo_Army(cкриптер и гл. админ) хорошо постарался +1
Дата: 27.02.2011, Воскресенье, 21:00:01 | Сообщение # $NUMBER
Группа: Забаненые
Сообщений: 273
Репутация: 251+
PokerFace, Да нет вроде из крима. Щяс вот сижу код просматриваю.
Дата: 27.02.2011, Воскресенье, 21:43:39 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 667
Репутация: 1425+
Ну и что вырезал?!, а кто из вас что-нибудь вырезал стоящие?! и написал здесь?. Лично дам +, всё же старался.
Дата: 27.02.2011, Воскресенье, 21:59:33 | Сообщение # $NUMBER
Группа: Забаненые
Сообщений: 273
Репутация: 251+
Steep_Chele, Я не спорю молодец. Хотя бы так предоставил. Просто поправил Игната. А так последую твоему примеру и дам +. XD
Дата: 19.06.2011, Воскресенье, 03:10:07 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 5
Репутация: -10+
Парни, помогите сделать, что бы обычные люди не могли зайди с АШ на "поле сдачи" , тоесть что бы была стрелочка возле двери, и всё время писало "Дождитесь начало экзамена" , а когда инструктор запускает урок для игрока, то он уже может входить. Буду благодарен ... даже заплачу чучуть и + обезателен.
  • Страница 1 из 1
  • 1
Поиск: