AMX - Исключить пункт(сделать неактивным) из голосования/выбора

Тема в разделе "Программирование / Скриптинг", создана пользователем Monomizer, 14 фев 2016.

  1. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.528
    Симпатии:
    201
    Всем привет, есть проблема.
    (amx|cs 1.6)
    В модификации джайла есть дни, когда игроки голосуют за режим дня, вернее в какую игру они хотят поиграть.
    Что я хочу - если эта игра была/проиграна/выбрана была, то исключить её из следующего голосования.

    PHP:
    Show_DayModeMenu(idiPos)
    {
        if(
    iPos 0) return Show_DayModeMenu(idg_iMenuPosition[id] = 0);
        
    jbe_informer_offset_up(id);
        new 
    iStart iPos PLAYERS_PER_PAGE;
        if(
    iStart g_iDayModeListSizeiStart g_iDayModeListSize;
        
    iStart iStart - (iStart 8);
        
    g_iMenuPosition[id] = iStart PLAYERS_PER_PAGE;
        new 
    iEnd iStart PLAYERS_PER_PAGE;
        if(
    iEnd g_iDayModeListSizeiEnd g_iDayModeListSize;
        new 
    szMenu[512], iLeniPagesNum = (g_iDayModeListSize PLAYERS_PER_PAGE + ((g_iDayModeListSize PLAYERS_PER_PAGE) ? 0));
        
    iLen formatex(szMenucharsmax(szMenu), "\y%L \w[%d|%d]^n\d%L^n"id"JBE_MENU_VOTE_DAY_MODE_TITLE"iPos 1iPagesNumid"JBE_MENU_VOTE_DAY_MODE_TIME_END"g_iDayModeVoteTime);
        new 
    aDataDayMode[DATA_DAY_MODE], iKeys = (1<<9), b;
        for(new 
    iStartiEnda++)
        {
            
    ArrayGetArray(g_aDataDayModeaaDataDayMode);
            if(
    aDataDayMode[MODE_BLOCKED])
                
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[%d] \d%L \r[%L]^n", ++bidaDataDayMode[LANG_MODE], id"JBE_MENU_VOTE_DAY_MODE_BLOCKED"aDataDayMode[MODE_BLOCKED]);
            else
            {
                if(
    IsSetBit(g_iBitUserDayModeVotedid))
                    
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[%d] \d%L \r[%d]^n", ++bidaDataDayMode[LANG_MODE], aDataDayMode[VOTES_NUM]);
                else
                {
                    if(
    jbe_game_birthday(id))
                    {
                        
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[%d] \d%L \r[%L]^n", ++bidaDataDayMode[LANG_MODE], id"JBE_MENU_VOTE_DAY_MODE_BLOCKED"aDataDayMode[MODE_BLOCKED]);
                    }
                    else
                    {
                        
    iKeys |= (1<<b);
                        
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y[%d] \w%L \r[%d]^n", ++bidaDataDayMode[LANG_MODE], aDataDayMode[VOTES_NUM]);
                    }      
                }
            }
        }
        for(new 
    bPLAYERS_PER_PAGEi++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n");
        if(
    iEnd g_iDayModeListSize)
        {
            
    iKeys |= (1<<8);
            
    formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y[9] \w%L^n\y[0] \w%L"id"JBE_MENU_NEXT"idiPos "JBE_MENU_BACK" "JBE_MENU_EXIT");
        }
        else 
    formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n^n\y[0] \w%L"idiPos "JBE_MENU_BACK" "JBE_MENU_EXIT");
        return 
    show_menu(idiKeysszMenu2"Show_DayModeMenu");
    }

    Тут в самом цикле есть if(IsSetBit(g_iBitUserDayModeVoted, id))
    И вот тут интересует else, где (jbe_game_birthday(id)) - эту ересь я отлавливаю, и если она сработала, нужно сделать неактивным именно пункт(Тут она отвечает за первый, игру День рождения).
    А у меня выходит иначе, блокируется сразу вообще весь список:
    upload_2016-2-14_2-0-55.png
    Т.е. тут на скрине должен быть серым первый пункт, а остальные серые.

    Когда я хочу заблокировать из вывода только первый пункт, сделать его не активным, неактивные уже все сразу

    Будь то обычный список - я бы не парился, но тут у меня руки опускаются...цикл.., не могу никак закрыть именно его(пункт), не тронув остальные.

    jbe_game_birthday(id) - натив, тру/фолс выдаёт.

    Сам старт голосования
    PHP:
    public jbe_vote_day_mode_start()
    {
        
    g_iDayModeVoteTime g_iAllCvars[DAY_MODE_VOTE_TIME] + 1;
        new 
    aDataDayMode[DATA_DAY_MODE];
        for(new 
    ig_iDayModeListSizei++)
        {
            
    ArrayGetArray(g_aDataDayModeiaDataDayMode);
            if(
    aDataDayMode[MODE_BLOCKED]) aDataDayMode[MODE_BLOCKED]--;
            
    aDataDayMode[VOTES_NUM] = 0;
            
    ArraySetArray(g_aDataDayModeiaDataDayMode);
        }
        for(new 
    iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++)
        {
            if(
    IsNotSetBit(g_iBitUserAliveiPlayer)) continue;
            
    SetBit(g_iBitUserVoteDayModeiPlayer);
            
    g_iBitKilledUsers[iPlayer] = 0;
            
    g_iMenuPosition[iPlayer] = 0;
            
    jbe_menu_block(iPlayer);
            
    set_pev(iPlayerpev_flagspev(iPlayerpev_flags) | FL_FROZEN);
            
    set_pdata_float(iPlayerm_flNextAttackfloat(g_iDayModeVoteTime), linux_diff_player);
            
    UTIL_ScreenFade(iPlayer004000255);
        }
        
    set_task(1.0"jbe_vote_day_mode_timer"TASK_VOTE_DAY_MODE_TIMER__"a"g_iDayModeVoteTime);
    }

    Прощу помощи, буду признателен
    Или хоть в какую сторону смотреть, пните.
    Обычно такое трудности не вызывает, но тут список весь перекрывается
     
    Последнее редактирование: 14 фев 2016
  2. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    Хм, мне кажется или ты в любом случаи блокируешь?
     
  3. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.528
    Симпатии:
    201
    да да, блок в любом случае, вот и вопрос, как его заставить именно нужное блокировать, а не всё уеликом