[ Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
|
Форум - Сообщество любителей игры GTA:MP » SA-MP Scripting » Школа PAWNO » [Pawno-Урок]Тест и практика В Автошколе |
[Pawno-Урок]Тест и практика В Автошколе |
Дата: 26.02.2011, Суббота, 12:54:42 | Сообщение # $NUMBER
Не встретил я этого урока, но если есть, то прошу удалить.
Итак начнем, в начало ко всем 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 new tmpcar = GetPlayerVehicleID(playerid); if(CP[playerid]==160) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 161; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1163.8602,-1714.5756,13.6291, 6.0);//Координаты чекпоинта format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре.");//Тест когда въезжаете на него SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==161) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 162; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1172.7843,-1838.5234,13.2813, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==162) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 163; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1074.2363,-1850.0891,13.2663, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==163) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 164; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1010.1013,-1790.8734,13.8094, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==164) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 165; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 824.4467,-1767.7909,13.2726, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==165) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 166; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 811.7640,-1688.6228,13.2578, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==166) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 167; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 902.9953,-1575.1826,13.2578, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==167) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 168; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1022.4305,-1574.5912,13.2577,6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==168) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 169; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1280.7607,-1574.2626,13.2579, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==169) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 170; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1343.5662,-1421.2140,13.2576, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==170) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 171; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1308.9182,-1603.2806,13.2578, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==171) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 172; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1310.6093,-1840.1766,13.2579, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==172) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 173; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1192.6682,-1850.1327,13.2741, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==173) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 174; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1074.3042,-1850.2167,13.2663, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==174) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 175; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1074.3042,-1850.2167,13.2663, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==175) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 176; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1037.1975,-1787.0304,13.4647, 6.0); format(string, sizeof(string), "* Получен новый маршрут! Следуйте к маячку на радаре."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==176) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 177; DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, 1135.3799,-1717.8076,13.5876, 6.0); format(string, sizeof(string), "* Акуратно заезжайте на парковку."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } else if(CP[playerid]==177) { if(IsAnAutoSchoolCar(tmpcar)) { CP[playerid] = 170; DisablePlayerCheckpoint(playerid); format(string, sizeof(string), "* Поздравляем! Вы успешно сдали на права."); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); SetVehicleToRespawn(GetPlayerVehicleID(playerid)); PlayerInfo[playerid][pCarLic] = 1; Practice[playerid] = 0; } else { SendClientMessage(playerid, COLOR_GREY, " Вы не в школьном авто !"); return 1; } } если кто-то будет ставить себе, то добавляйте ещё один паблик, если его у вас ещё нет: 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, Суббота, 20:59:11 | Сообщение # $NUMBER
Подредактировал, в следующий раз, прошу всё делать по правилам.
|
Дата: 26.02.2011, Суббота, 21:28:02 | Сообщение # $NUMBER
уже гдето видел этот урок и там я тоже написал что урок полное УГ.
зачем делать? 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
хороший урок
|
Дата: 27.02.2011, Воскресенье, 18:09:50 | Сообщение # $NUMBER
misha_konsta, Спасибо
lopik, Каждый делает по своему, не спорю урок такой может и был, но только с теоретической частью, а здесь вместе с практической, урока с практической частью, я в свое время нигде не нашел, поэтому и написал. |
Дата: 27.02.2011, Воскресенье, 21:43:39 | Сообщение # $NUMBER
Ну и что вырезал?!, а кто из вас что-нибудь вырезал стоящие?! и написал здесь?. Лично дам +, всё же старался.
|
Дата: 19.06.2011, Воскресенье, 03:10:07 | Сообщение # $NUMBER
Парни, помогите сделать, что бы обычные люди не могли зайди с АШ на "поле сдачи" , тоесть что бы была стрелочка возле двери, и всё время писало "Дождитесь начало экзамена" , а когда инструктор запускает урок для игрока, то он уже может входить. Буду благодарен ... даже заплачу чучуть и + обезателен.
|
| |||
| |||