• Регистрация на форуме отключена.
    Она будет открываться первого числа каждого месяца на 24 часа.

    Другие способы описаны>> тут <<

Игроки в меню с третьего пункта

Сообщения
25
Реакции
1
Здравствуйте.
Подскажите, как в этом меню сделать, чтобы список игроков начинался с 3 пункта.

Код:
Show_BlockedGuardMenu(id, iPos)
{
    if(iPos < 0) return PLUGIN_HANDLED;
    jbe_informer_offset_up(id);
    new iPlayersNum;
    for(new i = 1; i <= g_iMaxPlayers; i++)
    {
        if(IsNotSetBit(g_iBitUserConnected, i) || IsSetBit(g_iBitUserAdmin, i)) continue;
        g_iMenuPlayers[id][iPlayersNum++] = i;
    }
    new iStart = iPos * PLAYERS_PER_PAGE;
    if(iStart > iPlayersNum) iStart = iPlayersNum;
    iStart = iStart - (iStart % 8);
    g_iMenuPosition[id] = iStart / PLAYERS_PER_PAGE;
    new iEnd = iStart + PLAYERS_PER_PAGE;
    if(iEnd > iPlayersNum) iEnd = iPlayersNum;
    new szMenu[512], iLen, iPagesNum = (iPlayersNum / PLAYERS_PER_PAGE + ((iPlayersNum % PLAYERS_PER_PAGE) ? 1 : 0));
    switch(iPagesNum)
    {
        case 0:
        {
            UTIL_SayText(id, "!g[JBE] %L", id, "JBE_CHAT_ID_PLAYERS_NOT_VALID");
            switch(g_iUserTeam[id])
            {
                case 1, 2: return Show_VipMenu(id);
                default: return PLUGIN_HANDLED;
            }
        }
        default: iLen = formatex(szMenu, charsmax(szMenu), "\y%L \w[%d|%d]^n^n", id, "JBE_MENU_BLOCKED_GUARD_TITLE", iPos + 1, iPagesNum);
    }
    new szName[32], i, iKeys = (1<<9), b;
    for(new a = iStart; a < iEnd; a++)
    {
        i = g_iMenuPlayers[id][a];
        get_user_name(i, szName, charsmax(szName));
        iKeys |= (1<<b);
        if(IsSetBit(g_iBitUserBlockedGuard, i)) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \w%s \r*^n", ++b, szName);
        else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \w%s^n", ++b, szName);
    }
    for(new i = b; i < PLAYERS_PER_PAGE; i++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
    if(iEnd < iPlayersNum)
    {
        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, -1, "Show_BlockedGuardMenu");
}

public Handle_BlockedGuardMenu(id, iKey)
{
    switch(iKey)
    {
    
        case 1: // Здесь будет мой код
        case 2: // И здесь тоже
        
        case 8: return Show_BlockedGuardMenu(id, ++g_iMenuPosition[id]);
        case 9: return Show_BlockedGuardMenu(id, --g_iMenuPosition[id]);
        default:
        {
            new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
            if(IsSetBit(g_iBitUserBlockedGuard, iTarget)) ClearBit(g_iBitUserBlockedGuard, iTarget);
            else if(IsSetBit(g_iBitUserConnected, id))
            {
                if(g_iUserTeam[iTarget] == 2) jbe_set_user_team(iTarget, 1);
                SetBit(g_iBitUserBlockedGuard, iTarget);
            }
        }
    }
    return Show_BlockedGuardMenu(id, g_iMenuPosition[id]);
}
Немного теряюсь в коде.
Верны ли догадки, что в iKeys = (1<<9) нужно поменять значение?
 
Сообщения
25
Реакции
1
Добавил:

Код:
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[1] \wItem #1^n");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[2] \wItem #2^n");
Добавил и здесь, ибо реагировал только 1 пункт:

iKeys = (1<<0|1<<1|1<<9)



Код:
        case 0: client_print(0, print_chat, "Key: %d", iKey);
        case 1: client_print(0, print_chat, "Key: %d", iKey);
Значения верные выводит, но при нажатии, оба пункта пропадают и остаются игроки (Которых могу заблокировать)
При этом, если не трогать мои два добавленных пункта и выбрать игрока, то пункт с игроком не нажимается =)

Подскажите, как правильно добавить два пункта сверху меню?
Читал TUT, но там ничего не сказано про подобное)


Текущий код меню:

Код:
Cmd_BlockedGuardMenu(id) return Show_BlockedGuardMenu(id, g_iMenuPosition[id] = 0);
Show_BlockedGuardMenu(id, iPos)
{
    if(iPos < 0) return PLUGIN_HANDLED;
    jbe_informer_offset_up(id);
    new iPlayersNum;
    for(new i = 1; i <= g_iMaxPlayers; i++)
    {
        if(IsNotSetBit(g_iBitUserConnected, i) || IsSetBit(g_iBitUserAdmin, i)) continue;
        g_iMenuPlayers[id][iPlayersNum++] = i;
    }
    new iStart = iPos * PLAYERS_PER_PAGE;
    if(iStart > iPlayersNum) iStart = iPlayersNum;
    iStart = iStart - (iStart % 8);
    g_iMenuPosition[id] = iStart / PLAYERS_PER_PAGE;
    new iEnd = iStart + PLAYERS_PER_PAGE;
    if(iEnd > iPlayersNum) iEnd = iPlayersNum;
    new szMenu[512], iLen, iPagesNum = (iPlayersNum / PLAYERS_PER_PAGE + ((iPlayersNum % PLAYERS_PER_PAGE) ? 1 : 0));
    switch(iPagesNum)
    {
        case 0:
        {
            UTIL_SayText(id, "!g[JBE] %L", id, "JBE_CHAT_ID_PLAYERS_NOT_VALID");
            switch(g_iUserTeam[id])
            {
                case 1, 2: return Show_VipMenu(id);
                default: return PLUGIN_HANDLED;
            }
        }
        default: iLen = formatex(szMenu, charsmax(szMenu), "\y%L \w[%d|%d]^n^n", id, "JBE_MENU_BLOCKED_GUARD_TITLE", iPos + 1, iPagesNum);
    }
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[1] \wПункт^n");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[2] \wПункт^n");
    new szName[32], i, iKeys = (1<<0|1<<1|1<<9), b; // Добавил к iKey 1<<0 и 1<<1
    for(new a = iStart; a < iEnd; a++)
    {
        i = g_iMenuPlayers[id][a];
        get_user_name(i, szName, charsmax(szName));
        iKeys |= (1<<b);
        if(IsSetBit(g_iBitUserBlockedGuard, i)) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \w%s \r*^n", ++b, szName);
        else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[%d] \w%s^n", ++b, szName);
    }
    for(new i = b; i < PLAYERS_PER_PAGE; i++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
    if(iEnd < iPlayersNum)
    {
        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, -1, "Show_BlockedGuardMenu");
}

public Handle_BlockedGuardMenu(id, iKey)
{
    switch(iKey)
    {
        case 0: client_print(0, print_chat, "Key: %d", iKey);
        case 1: client_print(0, print_chat, "Key: %d", iKey);
        case 8: return Show_BlockedGuardMenu(id, ++g_iMenuPosition[id]);
        case 9: return Show_BlockedGuardMenu(id, --g_iMenuPosition[id]);
        default:
        {
            new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
            if(IsSetBit(g_iBitUserBlockedGuard, iTarget)) ClearBit(g_iBitUserBlockedGuard, iTarget);
            else if(IsSetBit(g_iBitUserConnected, id))
            {
                if(g_iUserTeam[iTarget] == 2) jbe_set_user_team(iTarget, 1);
                SetBit(g_iBitUserBlockedGuard, iTarget);
            }
        }
    }
    return Show_BlockedGuardMenu(id, g_iMenuPosition[id]);
}
 
Сообщения
25
Реакции
1
for(new i = 2; i <= g_iMaxPlayers; i++)

b = 1;

Тоже не помогает.
UP.
 
Сообщения
12
Реакции
1
Тоже было бы интересно посмотреть на готовый вариант реализации, скажем так, что для саморазвития небольшого, но к сожалению, я не помощник в этом.
 
Сообщения
2,053
Реакции
1,181
Предупреждения
10
Помог
41 раз(а)
А для чего тебе вывод, начиная с 3 пункта?
 
Сообщения
25
Реакции
1
Minni, в первом пункте, я хочу для себя сделать, чтобы можно было заблокировать всех, а во втором, чтобы мог сделать всеобщую амнистию, скажем так - вот такие тараканы в голове.
 
Сообщения
6
Реакции
0
C++:
public menu_players(id)
{
    new szMenu[128];
    formatex(szMenu, charsmax(szMenu), "use this line if you have long text");
    new menu = menu_create(szMenu, "menu_players_handler");

        menu_additem(menu, "YOUR FIRST ITEM", "1");
        menu_additem(menu, "YOUR SECOND ITEM", "2");

    new players[MAX_PLAYERS], pnum;
    get_players(players, pnum, "ach");

    for (new i = 0; i < pnum; i++)
    {
        new const target = players[i];
        new sz_name[MAX_NAME_LENGTH], sz_data[32];
        get_user_name(target, sz_name, charsmax(sz_name));
        format(sz_data, charsmax(sz_data), "%i", target);
        menu_additem(menu, sz_name, sz_data);
    }

    menu_display(id, menu);
}

public menu_players_handler(id, menu, item)
{
    if (item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    switch(item) {
        case 0:{
            1 ITEM CODE;
        }
        case 1:{
            2 ITEM CODE;
        }
    }

    new sz_data[32];
    menu_item_getinfo(menu, item, _, sz_data, charsmax(sz_data), _, _, _);

    b_AdminCheck[str_to_num(sz_data)] = true; // tyt u menya check. svoi kod vstavlyai

    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
 
Сообщения
25
Реакции
1
soda, спасибо, но мне на старой системе меню нужно было. Именно на той, которая указана в теме.
Неактуально. Думаю, ваш код кому-нибудь пригодится :)
 

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

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу