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

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±

    Помогите с реализацией

    По какому принципу можно реализовать такое,

    Вверху есть тексдрав (он мигнул), затем под ним ещё тексдрав, нужно чтобы игрок нажимал именно на это, то что внизу.
    И таких несколько,

    Подскажите как проще реализовать

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    const COUNT_BOX 4;
    new 
        
    Text:td_FlashBox[COUNT_BOX],
        
    Text:td_SelectableBox[COUNT_BOX];


    public 
    OnGameModeInit()
    {
        
    td_FlashBox[0] = TextDrawCreate(0.00.0"Текстдрав, который будет мигать №1");
        
    td_FlashBox[1] = TextDrawCreate(0.00.0"Текстдрав, который будет мигать №2");
        
    td_FlashBox[2] = TextDrawCreate(0.00.0"Текстдрав, который будет мигать №3");
        
    td_FlashBox[3] = TextDrawCreate(0.00.0"Текстдрав, который будет мигать №4");

        
    td_SelectableBox[0] = TextDrawCreate(0.00.0"Текстдрав, который будет выбирать игрок №1");
        
    td_SelectableBox[1] = TextDrawCreate(0.00.0"Текстдрав, который будет выбирать игрок №2");
        
    td_SelectableBox[2] = TextDrawCreate(0.00.0"Текстдрав, который будет выбирать игрок №3");
        
    td_SelectableBox[3] = TextDrawCreate(0.00.0"Текстдрав, который будет выбирать игрок №4");
    }

    public 
    OnPlayerConnect(playerid)
    {
        
    TextDrawShowForPlayer(playeridtd_FlashBox[0]);
        
    TextDrawShowForPlayer(playeridtd_FlashBox[1]);
        
    TextDrawShowForPlayer(playeridtd_FlashBox[2]);
        
    TextDrawShowForPlayer(playeridtd_FlashBox[3]);
        
    TextDrawShowForPlayer(playeridtd_SelectableBox[0]);
        
    TextDrawShowForPlayer(playeridtd_SelectableBox[1]);
        
    TextDrawShowForPlayer(playeridtd_SelectableBox[2]);
        
    TextDrawShowForPlayer(playeridtd_SelectableBox[3]);
        
    SetPVarInt(playerid"TextDrawSelectionMode"1);
        return 
    1;
    }

    public 
    OnPlayerCommandText(...)
    {
        if(!
    strcmp("/test"cmdtexttrue))
        {
            new 
    idx random(COUNT_BOX);
            
    TextDrawColor(td_FlashBox[idx], 0x000000FF);//Изменили цвет
            
    TextDrawShowForPlayer(playeridtd_FlashBox[idx]);
            
    TextDrawColor(td_FlashBox[idx], 0xFFFFFFFFF);//Вернули назад (потребуется таймер, скорее всего)
            
    TextDrawShowForPlayer(playeridtd_FlashBox[idx]);
            
    SetPVarInt(playerid"ExpectedSelectionTD"idx);
            return 
    1;
        }
    }

    public 
    OnPlayerClickTextDraw(playeridText:clickedid)
    {
        if(
    GetPVarInt(playerid"TextDrawSelectionMode"))
        {
            new 
    idx GetPVarInt(playerid"ExpectedSelectionTD");
            
    DeletePVar(playerid"ExpectedSelectionTD");
            if(
    clickedid == td_SelectableBox[idx])
            {
                
    //Игрок выбрал правильно
            
    }
            else
            {
                
    //Игрок выбрал неправильно
            
    }
        }
        return 
    1;

    Последний раз редактировалось DeimoS; 13.05.2017 в 16:26.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Killer (13.05.2017)
  4. #3
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    Огромнейшее тебе спасибо!
    Но как таймер поставить? Я с ними плохо дружу.

    Код:
    //PlayerTextDrawColor(playerid, td_FlashBox[playerid][idx], 0xFFFFFFFFF);//Вернули назад (потребуется таймер, скорее всего)
               PlayerTextDrawShow(playerid, td_FlashBox[playerid][idx]);
    ;-)

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну так подружись :) SetTimerEx
    Последний раз редактировалось DeimoS; 13.05.2017 в 16:05.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    А как сделать чтобы рандом не повторялся? Ибо иногда сразу же повтор берет.

  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    public OnPlayerCommandText(...)
    {
        if(!
    strcmp("/test"cmdtexttrue))
        {
            new 
    idx;
    _random_repeat:
            
    idx random(COUNT_BOX);
            if(
    GetPVarType(playerid"ExpectedSelectionTD") != PLAYER_VARTYPE_NONE && GetPVarInt(playerid"ExpectedSelectionTD") == idx)
    goto 
    _random_repeat;
            
    TextDrawColor(td_FlashBox[idx], 0x000000FF);//Изменили цвет
            
    TextDrawShowForPlayer(playeridtd_FlashBox[idx]);
            
    TextDrawColor(td_FlashBox[idx], 0xFFFFFFFFF);//Вернули назад (потребуется таймер, скорее всего)
            
    TextDrawShowForPlayer(playeridtd_FlashBox[idx]);
            
    SetPVarInt(playerid"ExpectedSelectionTD"idx);
            return 
    1;
        }

    - - - Добавлено - - -

    И да, не забудь удалить pVar когда текстдравы скроешь
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    Killer (13.05.2017)
  10. #7
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    Ошибка ещё одна, не знаю что такое.

    Например td_SelectableBox[playerid][0], используется ячейка (0)

    В клике принимается ячейка эта 0.

    Код:
    if(playertextid == td_SelectableBox[playerid][idx])
            {
    PVar присваивает 0 значение при удалении.

    Код:
    DeletePVar(playerid, "ExpectedSelectionTD");
    Баг получается такой, то что выбирать я могу всегда 0 тексдрав, без зависимости можно или нет.

  11. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, во-первых зачем там индивидуальные текстдравы? Можно и глобальными обойтись.
    Во-вторых, покажи код, который получился у тебя
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  12. #9
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    На индивидуальных тексдравах мне удобнее, проще говоря. Это плохо?

    Код:
     if(GetPVarInt(playerid, "TextDrawSelectionMode"))
        {
            new idx = GetPVarInt(playerid, "ExpectedSelectionTD");
            PlayerTextDrawColor(playerid, td_FlashBox[playerid][idx], 0xFFFFFFFFF);
            PlayerTextDrawShow(playerid, td_FlashBox[playerid][idx]);
            if(playertextid == td_SelectableBox[playerid][idx])
            {
                     DeletePVar(playerid, "ExpectedSelectionTD");
    		   new rand; _random_repeat:
                      rand = random(COUNT_BOX);
                       if(GetPVarType(playerid, "ExpectedSelectionTD") != PLAYER_VARTYPE_NONE && GetPVarInt(playerid, "ExpectedSelectionTD") == rand)
     		   goto _random_repeat;
               PlayerTextDrawColor(playerid, td_FlashBox[playerid][rand], 0xfCD5C5Cff);//Èçìåíèëè öâåò
               PlayerTextDrawShow(playerid, td_FlashBox[playerid][rand]);
               SetPVarInt(playerid, "ExpectedSelectionTD", rand);
            }
            else
    		{
    		   SendClientMessage(playerid,-1,"Âûáðàë íåïðàâèëüíî");
    		   DeletePVar(playerid, "ExpectedSelectionTD");
    		   return true;
            }
        }
    Последний раз редактировалось Killer; 13.05.2017 в 18:49.

 

 

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

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

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

Ваши права

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