Monomizer
Держу JDW в бане.
- Сообщения
- 1,947
- Команда форума
- #1
Всем привет, есть проблема.
(amx|cs 1.6)
В модификации джайла есть дни, когда игроки голосуют за режим дня, вернее в какую игру они хотят поиграть.
Что я хочу - если эта игра была/проиграна/выбрана была, то исключить её из следующего голосования.
Тут в самом цикле есть if(IsSetBit(g_iBitUserDayModeVoted, id))
И вот тут интересует else, где (jbe_game_birthday(id)) - эту ересь я отлавливаю, и если она сработала, нужно сделать неактивным именно пункт(Тут она отвечает за первый, игру День рождения).
А у меня выходит иначе, блокируется сразу вообще весь список:
Т.е. тут на скрине должен быть серым первый пункт, а остальные серые.
Когда я хочу заблокировать из вывода только первый пункт, сделать его не активным, неактивные уже все сразу
Будь то обычный список - я бы не парился, но тут у меня руки опускаются...цикл.., не могу никак закрыть именно его(пункт), не тронув остальные.
jbe_game_birthday(id) - натив, тру/фолс выдаёт.
Сам старт голосования
Прощу помощи, буду признателен
Или хоть в какую сторону смотреть, пните.
Обычно такое трудности не вызывает, но тут список весь перекрывается
(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)) - эту ересь я отлавливаю, и если она сработала, нужно сделать неактивным именно пункт(Тут она отвечает за первый, игру День рождения).
А у меня выходит иначе, блокируется сразу вообще весь список:
Т.е. тут на скрине должен быть серым первый пункт, а остальные серые.
Когда я хочу заблокировать из вывода только первый пункт, сделать его не активным, неактивные уже все сразу
Будь то обычный список - я бы не парился, но тут у меня руки опускаются...цикл.., не могу никак закрыть именно его(пункт), не тронув остальные.
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);
}
Прощу помощи, буду признателен
Или хоть в какую сторону смотреть, пните.
Обычно такое трудности не вызывает, но тут список весь перекрывается
Последнее редактирование: