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

Monomizer

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

PHP:
Show_DayModeMenu(id, iPos)
{
    if(iPos < 0) return Show_DayModeMenu(id, g_iMenuPosition[id] = 0);
    jbe_informer_offset_up(id);
    new iStart = iPos * PLAYERS_PER_PAGE;
    if(iStart > g_iDayModeListSize) iStart = g_iDayModeListSize;
    iStart = iStart - (iStart % 8);
    g_iMenuPosition[id] = iStart / PLAYERS_PER_PAGE;
    new iEnd = iStart + PLAYERS_PER_PAGE;
    if(iEnd > g_iDayModeListSize) iEnd = g_iDayModeListSize;
    new szMenu[512], iLen, iPagesNum = (g_iDayModeListSize / PLAYERS_PER_PAGE + ((g_iDayModeListSize % PLAYERS_PER_PAGE) ? 1 : 0));
    iLen = formatex(szMenu, charsmax(szMenu), "\y%L \w[%d|%d]^n\d%L^n", id, "JBE_MENU_VOTE_DAY_MODE_TITLE", iPos + 1, iPagesNum, id, "JBE_MENU_VOTE_DAY_MODE_TIME_END", g_iDayModeVoteTime);
    new aDataDayMode[DATA_DAY_MODE], iKeys = (1<<9), b;
    for(new a = iStart; a < iEnd; a++)
    {
        ArrayGetArray(g_aDataDayMode, a, aDataDayMode);
        if(aDataDayMode[MODE_BLOCKED])
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \d%L \r[%L]^n", ++b, id, aDataDayMode[LANG_MODE], id, "JBE_MENU_VOTE_DAY_MODE_BLOCKED", aDataDayMode[MODE_BLOCKED]);
        else
        {
            if(IsSetBit(g_iBitUserDayModeVoted, id))
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \d%L \r[%d]^n", ++b, id, aDataDayMode[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", ++b, id, aDataDayMode[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", ++b, id, aDataDayMode[LANG_MODE], aDataDayMode[VOTES_NUM]);
                }      
            }
        }
    }
    for(new i = b; i < PLAYERS_PER_PAGE; i++) 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", id, iPos ? "JBE_MENU_BACK" : "JBE_MENU_EXIT");
    }
    else formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y[0] \w%L", id, iPos ? "JBE_MENU_BACK" : "JBE_MENU_EXIT");
    return show_menu(id, iKeys, szMenu, 2, "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 i; i < g_iDayModeListSize; i++)
    {
        ArrayGetArray(g_aDataDayMode, i, aDataDayMode);
        if(aDataDayMode[MODE_BLOCKED]) aDataDayMode[MODE_BLOCKED]--;
        aDataDayMode[VOTES_NUM] = 0;
        ArraySetArray(g_aDataDayMode, i, aDataDayMode);
    }
    for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
    {
        if(IsNotSetBit(g_iBitUserAlive, iPlayer)) continue;
        SetBit(g_iBitUserVoteDayMode, iPlayer);
        g_iBitKilledUsers[iPlayer] = 0;
        g_iMenuPosition[iPlayer] = 0;
        jbe_menu_block(iPlayer);
        set_pev(iPlayer, pev_flags, pev(iPlayer, pev_flags) | FL_FROZEN);
        set_pdata_float(iPlayer, m_flNextAttack, float(g_iDayModeVoteTime), linux_diff_player);
        UTIL_ScreenFade(iPlayer, 0, 0, 4, 0, 0, 0, 255);
    }
    set_task(1.0, "jbe_vote_day_mode_timer", TASK_VOTE_DAY_MODE_TIMER, _, _, "a", g_iDayModeVoteTime);
}

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

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Хм, мне кажется или ты в любом случаи блокируешь?
if(aDataDayMode[MODE_BLOCKED])
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \d%L \r[%L]^n", ++b, id, aDataDayMode[LANG_MODE], id, "JBE_MENU_VOTE_DAY_MODE_BLOCKED", aDataDayMode[MODE_BLOCKED]);
else
{
if(
IsSetBit(g_iBitUserDayModeVoted, id))
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \d%L \r[%d]^n", ++b, id, aDataDayMode[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", ++b, id, aDataDayMode[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", ++b, id, aDataDayMode[LANG_MODE], aDataDayMode[VOTES_NUM]);
}
}
}
 

Monomizer

Держу JDW в бане.
Сообщения
1,947
  • Команда форума
  • #3
да да, блок в любом случае, вот и вопрос, как его заставить именно нужное блокировать, а не всё уеликом
 
Сверху Снизу