Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±

    Сдача теста

    Всем здравствуйте. Такой вопрос, как реализовать тест через стиль DIALOG_STYLE_INPUT чтобы были верны варианты ответа.
    Приведу пример. Есть Диалог
    PHP код:
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,"Вопрос №1","{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n1. Предупреждает о неисправности светофора.\n2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n3. Запрещает дальнейшее движение.","Далее",""); 
    Как сделать если игрок написал правильный ответ - 2, тест шел дальше, а если не правильно 1 или 3, то выдавал игроку ошибку.
    И можно ли сделать так, чтобы на каждом вопросе разные цифры были или же придется создать переменную, и приравнять значение 2 допустим и чтобы все ответы были 2.
    Подскажите способ реализации.

  2. #2
    Аватар для BadPawn
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    PHP код:
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,"Вопрос №1","{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
        1. Предупреждает о неисправности светофора.\n\
        2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
        3. Запрещает дальнейшее движение."
    ,"Далее","");
        
        
    public 
    OnDialogResponse:

    case 
    0://0 - dialogid
    {
        switch(
    listitem)
        {
            case 
    0//Не верный ответ. +1 к ошибке (если есть возможность не сдать:)), выводим диалог того же вопроса
            
    {
                
    SendClientMessage(playerid, -1, !"   Ответ не верный !");
                return 
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
                    !
    "Вопрос №1",
                    !
    "{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
                        1. Предупреждает о неисправности светофора.\n\
                        2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
                        3. Запрещает дальнейшее движение."
    ,
                    !
    "Далее",
                    !
    "");        
            }
            case 
    1:
            {
                
    SendClientMessage(playerid, -1, !"   Ответ верный !");
                
    //К следующему вопросу
                
    return ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
                    !
    "Вопрос №1..N",
                    !
    "{FFDEAD}Обязаны ли вы пропустить пешехода, заступивший на пешеходный переход?\n\n\
                        1. Обязан.\n\
                        2. Не обязан\n"
    ,
                    !
    "Далее",
                    !
    "");        
            }
            case 
    2//Аналогично с 0
            
    {
                
    SendClientMessage(playerid, -1, !"   Ответ не верный !");
                return 
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
                    !
    "Вопрос №1",
                    !
    "{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
                        1. Предупреждает о неисправности светофора.\n\
                        2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
                        3. Запрещает дальнейшее движение."
    ,
                    !
    "Далее",
                    !
    "")
            }
        }
    }
    case 
    1://1 - dialogid
    {
        switch(
    listitem)
        {
            case 
    0:
            {
                
    SendClientMessage(playerid, -1, !"   Ответ верный !");
            }
            case 
    1:
            {
                
    SendClientMessage(playerid, -1, !"   Ответ не верный !");
            }
        }


    С меня конечно объяснитель дикий. Надеюсь поймешь. )))
    Последний раз редактировалось BadPawn; 15.08.2016 в 04:10. Причина: добавил не много текста

  3. #3
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Неа, не работает. Разве такой вариант DIALOG_STYLE_INPUT а не для DIALOG_STYLE_LIST?

  4. #4
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    По моему такая конструкция в коде диалога куда проще и читаемой будет, не?
    PHP код:
    if(strval(inputtext) == X)//X - там где будет крыться верный ответ
    {
        
    SendClientMessage(playerid, -1, !"   Ответ верный !");
        
    //К следующему вопросу
        
    return ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
        !
    "Вопрос №1..N",
        !
    "{FFDEAD}Обязаны ли вы пропустить пешехода, заступивший на пешеходный переход?\n\n\
            1. Обязан.\n\
            2. Не обязан"
    ,
        !
    "Далее", !"");        
    }
    else
    {
        
    SendClientMessage(playerid, -1, !"   Ответ не верный !");
        return 
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
        !
    "Вопрос №1",
        !
    "{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
            1. Предупреждает о неисправности светофора.\n\
            2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
            3. Запрещает дальнейшее движение."
    ,
        !
    "Далее", !"");

    Последний раз редактировалось vovandolg; 15.08.2016 в 19:14.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  5. #5
    Аватар для Sp1ke
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    По моему такая конструкция в коде диалога куда проще и читаемой будет, не?
    PHP код:
    if(strval(inputtext) == X)//X - там где будет крыться верный ответ
    {
        
    SendClientMessage(playerid, -1, !"   Ответ верный !");
        
    //К следующему вопросу
        
    return ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
        !
    "Вопрос №1..N",
        !
    "{FFDEAD}Обязаны ли вы пропустить пешехода, заступивший на пешеходный переход?\n\n\
            1. Обязан.\n\
            2. Не обязан"
    ,
        !
    "Далее", !"");        
    }
    else
    {
        
    SendClientMessage(playerid, -1, !"   Ответ не верный !");
        return 
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
        !
    "Вопрос №1",
        !
    "{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
            1. Предупреждает о неисправности светофора.\n\
            2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
            3. Запрещает дальнейшее движение."
    ,
        !
    "Далее", !"")

    Забыл в последнем диалоге ; поставить, да и вроде когда табулируешь текст еще раз смотрится приятней
    PHP код:
        return 
            
    ShowPlayerDialog(playerid6DIALOG_STYLE_INPUT,
                !
    "Вопрос №1",
                !
    "{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
                    1. Предупреждает о неисправности светофора.\n\
                    2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
                    3. Запрещает дальнейшее движение."
    ,
                !
    "Далее", !""
            
    ); 

  6. Пользователь сказал cпасибо:
    vovandolg (15.08.2016)
  7. #6
    Аватар для Saibot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.08.2016
    Сообщений
    58
    Репутация:
    24 ±
    Цитата Сообщение от vovandolg
    PHP код:
    if(strval(inputtext) == X)//X - там где будет крыться верный ответ
    {
        
    SendClientMessage(playerid, -1, !"   Ответ верный !");
        
    //К следующему вопросу
        
    return ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
        !
    "Вопрос №1..N",
        !
    "{FFDEAD}Обязаны ли вы пропустить пешехода, заступивший на пешеходный переход?\n\n\
            1. Обязан.\n\
            2. Не обязан"
    ,
        !
    "Далее", !"");
    }
    else
    {
        
    SendClientMessage(playerid, -1, !"   Ответ не верный !");
        return 
    ShowPlayerDialog(playerid,6,DIALOG_STYLE_INPUT,
        !
    "Вопрос №1",
        !
    "{FFDEAD}Что означает мигание зелёного сигнала светофора?\n\n\
            1. Предупреждает о неисправности светофора.\n\
            2. Разрешает движение и информирует о том, что вскоре будет включен запрещающий сигнал.\n\
            3. Запрещает дальнейшее движение."
    ,
        !
    "Далее", !"");

    А если будет 20 вопросов?

    Думаю так будет лучше, имхо.
    PHP код:
    //Ко всем глобальным переменным
    enum e_DRIVING_SCHOOL_TEST
    {
        
    QUESTION[64],/*Длина вопроса*/
        
    ANSWER/*Ответ*/
    }

    const 
    AMOUNT_QUESTION 2;/*Кол-во вопросов*/

    static const school_test [AMOUNT_QUESTION] [e_DRIVING_SCHOOL_TEST] =
    {
        {!
    "Вопрос 1"2/*ответ 2*/},
        {!
    "Вопрос 2"1/*ответ 1*/}
    };

    new 
    gFollowingQuestion[MAX_PLAYER char];

    //Там где начинается тест
    CMD:test(playerid)
    {
        
    SCM(playerid, -1, !"Тест начался");
        
    gFollowingQuestion{playerid} = 0;
        return 
    AskingQuestions(playerid);
    }

    //Диалог
    case 6:
    {
        if(!
    response)
            return 
    1;

        if(
    strval(inputtext)) == school_test[gFollowingQuestion{playerid}][ANSWER])
        {
            
    SCM(playerid, -1, !"Ответ верный");
            if(++ 
    gFollowingQuestion{playerid} == AMOUNT_QUESTION)/*Проверка на последней вопрос*/
            
    {
                
    /*Выдаем игроку лицензию*/
                
    return SCM(playerid, -1, !"Вы прошли тест");
            }
            
    AskingQuestions(playerid);//Показываем ему следующий вопрос.
        
    }
        else
        {
            
    SCM(playerid, -1, !"Ответ не верный");
            
    AskingQuestions(playerid);//Показываем ему, этот же вопрос
        
    }
    }
    //В конец мода
    sotck AskingQuestions(playerid)
    {
        new 
    question[11 char] = !"Вопрос №";

        
    valstr(questiongFollowingQuestion{playerid}+1);

        return 
    ShowPlayerDialog(playerid6DIALOG_STYLE_INPUTquestion,
                    
    school_test[gFollowingQuestion{playerid}][QUESTION], !"Далее""");

    Это практически уже готовый вариант, осталось только добавить вопросы и правильные ответы на них.
    Последний раз редактировалось Saibot; 27.08.2016 в 22:40.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •