След. Страница

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
107
Реакции
1
Возможно ли сделать на данном меню переход на следующую старницу? или это только возможно на другом меню
 

Вложения

Сообщения
988
Реакции
53
Помог
10 раз(а)
А поконкретнее? У тебя же 7 пунктов в меню
 
Последнее редактирование:
Сообщения
107
Реакции
1
@Code_0xABC,Ну в общем у меня там нету кнопок далее и назад то есть мне нужно чтобы на 8 и 9 пункте был переход на след страницу
2 Дек 2023
@Code_0xABC,Я пробывал добавить дня два назад брав пример с другого меню но я так понимаю это не так работает
 
Сообщения
988
Реакции
53
Помог
10 раз(а)
А показать свои попытки?
 
Сообщения
107
Реакции
1
@Code_0xABC,Удалил, решил тут спросить вообще возможно ли это на данной основе меню
 
Сообщения
107
Реакции
1
Чет не получается люди напишите пример как добавить на этом коде след страницу пожалуйста
 
Сообщения
713
Реакции
479
Помог
10 раз(а)
я не думаю что пример, который привел Nordic для вас будет полезным с вашим текущими знаниями
как вариант для вас написать код топорно "как есть"

создать глобальную переменную-массив, например, new g_iCurrentPage[MAX_PLAYERS + 1] , которая будет хранить текущую страницу игрока.
Далее в самом функции отображения меню перебирать через if или же switch
C#:
    len += formatex(menu[len], charsmax(menu) - len, "\wМеню Настройки \rСкина ^n^n")


    switch (g_iCurrentPage[id]) { // счетчик текущей страницы
        case 0: { // страница 1
            // ваш код начинается здесь как первая страница
            len += formatex(menu[len], charsmax(menu) - len, "\y[\r1\y]  \w%s^n", HUMAN_ZPLAYER2)
                keys += MENU_KEY_1    
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r2\y]  \w%s^n", HUMAN_ZPLAYER1)
                keys += MENU_KEY_2
            
            if(get_user_flags(id) & ADMIN_FLAGA){
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r3\y]  \w%s \y(ADMIN)\w^n", HUMAN_ADMIN)
                keys += MENU_KEY_3
                } else {
                len += formatex(menu[len], charsmax(menu) - len, "\d[3]  \d%s \y(ADMIN)\w^n", HUMAN_ADMIN)
                keys += MENU_KEY_3;}
            
            if(get_user_flags(id) & ADMIN_FLAGL){
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r4\y]  \w%s \y(LORD)\w^n", HUMAN_LORD)
                keys += MENU_KEY_4
                } else {
                len += formatex(menu[len], charsmax(menu) - len, "\d[4]  \d%s \y(LORD)\w^n", HUMAN_LORD)
                keys += MENU_KEY_4;}
            
            if(get_user_flags(id) & ADMIN_FLAGI){
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r5\y]  \w%s \y(IMPER)\w^n", HUMAN_IMPER)
                keys += MENU_KEY_5
                } else {
                len += formatex(menu[len], charsmax(menu) - len, "\d[5]  \d%s \y(IMPER)\w^n", HUMAN_IMPER)
                keys += MENU_KEY_5;}
            
            if(get_user_flags(id) & ADMIN_FLAGM){
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r6\y]  \w%s \y(MUMMY)\w^n", HUMAN_MUMMY)
                keys += MENU_KEY_6
                } else {
                len += formatex(menu[len], charsmax(menu) - len, "\d[6]  \d%s \y(MUMMY)\w^n", HUMAN_MUMMY)
                keys += MENU_KEY_6;}
            if(get_user_flags(id) & ADMIN_FLAGN){
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r7\y]  \w%s \y(Набор)\w^n", HUMAN_NANO)
                keys += MENU_KEY_7
                } else {
                len += formatex(menu[len], charsmax(menu) - len, "\d[7]  \d%s \y(Набор)\w^n", HUMAN_NANO)
                keys += MENU_KEY_7;}
        }
        case 1: { // страница 2
            // тут фактически тоже самое что в прошлой ветке, только уже с новыми данными
            len += formatex(menu[len], charsmax(menu) - len, "\y[\r1\y]  \w%s^n", HUMAN_PAGE2_1)
                keys += MENU_KEY_1    
                len += formatex(menu[len], charsmax(menu) - len, "\y[\r2\y]  \w%s^n", HUMAN_PAGE2_2)
                keys += MENU_KEY_2
        }
    }
    if (g_iCurrentPage[id] == MAX_PAGE-1) { // проверяем что это последння страница. Если да, то больше не можем жать 9
        len += formatex(menu[len], charsmax(menu) - len, "^n\r9. \d%L", id, "MENU_NEXT"); 
    }
    else {
        len += formatex(menu[len], charsmax(menu) - len, "^n\r9. \w%L", id, "MENU_NEXT"); keys |= MENU_KEY_9;
    }
    // Если это первая страница (напомню что считаем с 0, а не с 1), то показываем выход, а не далее
    if (g_iCurrentPage[id] < 1) {
        len += formatex(menu[len], charsmax(menu) - len, "^n\r0. \w%L", id, "MENU_EXIT");  keys |= MENU_KEY_0;
    }
    else { // иначе показываем кнопку назад
        len += formatex(menu[len], charsmax(menu) - len, "^n\r0. \w%L", id, "MENU_BACK");  keys |= MENU_KEY_0;
    }
не забываем задать значение максимальной страницы.
В этом варианте использую макрос

#define MAX_PAGE 2 // ваши две страницы


Возможность нажатия здесь определяет переменная keys, которая хранит битсумму кнопок для текущего меню и передается в show_menu


далее продолжаем издеваться над глазами здешних обитателей следующим образом

C#:
public menu_handler(id, key)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return;

    switch (g_iCurrentPage[id]) {
        case 0: { // страница 1
            switch (key) {
                case 0: classZplayer2(id)
                case 1: classZplayer1(id)
                case 2: classAdmin(id)
                case 3: classLord(id)
                case 4: classImper(id)
                case 5: classMummy(id)   
                case 6: classNano(id);
            }
        }
        case 1: { // страница 2
            case 0: { // первая
                // тут уже должен быть вызов замены модели страницы №2
            }
            case 1: {

            }
        }

        case 9: {

            // закомменченно, т.к. по идее не должно вызваться из-за блока по битсумме keys
            // if (g_iCurrentPage[id] != MAX_PAGE-1)
            g_iCurrentPage[id]++; // здесь плюсуем страничку и вызываем меню повторно
            open_menu(id); // очевидно чтобы вызвать уже менюшку с новой страницы
        }
        case 0: {
            // Если не первая страница, то возвращаемся на 1
            if (g_iCurrentPage[id] > 0) {
                g_iCurrentPage[id]--; // ++ - прибавляет 1, --убавляет на 1
                open_menu(id);
            }
        }
    }
}
не уверен что из того что я написал, вы сможете разобрать, поэтому по-хорошему вам в раздел заказов. Если же нет, то пишите вопросы - вам скорее всего помогут
 
Сообщения
3,390
Реакции
1,487
Помог
125 раз(а)
iaws, такое меню, которое я показал, подходит для динамического кол-ва пунктов, например меню игроков, как в примере. Если нужно простое меню с определённым количеством пунктов, то надо вручную добавить пункты перехода на следующую и предыдущую страницы, а в хендлере меню реализовать переключение страниц через массив. Как показали выше.
 
Последнее редактирование:
Сообщения
713
Реакции
479
Помог
10 раз(а)
BalbuR,
Это готовый вариант или его надо доделывать?
почти готовый, конечно же я не напишу полностью готовое решение - дам вам немножко подумать. На самом деле все на поверхности, стоит только начать
 
Сообщения
107
Реакции
1
BalbuR, в 1 части я +- что-то да понял но во 2 не очень щас пытаюсь понять где моя ошибка
 
Сообщения
107
Реакции
1
@BalbuR,дайте подсказу я уже тут полтора часа сижу разные вещи пробую всегда ерроры, 1 раз получилось но при этом мне пришлось вырезать чуть ли не половину и при этом оно не работает ничего не понимаю что вы во 2 части написали даже с описанием

Код:
public menu_handler(id, key)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return;

    switch (g_iCurrentPage[id]) {
        case 0: { // страница 1
            switch (key) {
                case 0: classZplayer2(id)
                case 1: classZplayer1(id)
                case 2: classAdmin(id)
                case 3: classLord(id)
                case 4: classImper(id)
                case 5: classMummy(id)   
                case 6: classNano(id);
            }
        }
        case 1: {
            switch (key) {
                case 0: classZplayer1pg(id);
            }
        }
        case 9:
        {
            g_iCurrentPage[id]++; // здесь плюсуем страничку и вызываем меню повторно
            open_menu(id); // очевидно чтобы вызвать уже менюшку с новой страницы
        }
    }
}
4 Дек 2023
вот что получилось не рабочие без ероров
 
Сообщения
988
Реакции
53
Помог
10 раз(а)
iaws, если вы меняете страничку, то вам нужно делать в нутри switch(key)
 
Сообщения
107
Реакции
1
@Code_0xABC,к сожалению особого буста мне это не дало
4 Дек 2023
Code_0xABC, но в любом случае спасибо
 
Сообщения
988
Реакции
53
Помог
10 раз(а)
Код:
public menu_handler(id, key)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return;

    switch (g_iCurrentPage[id]) {
        case 0: { // страница 1
            switch (key) {
                case 0: classZplayer2(id)
                case 1: classZplayer1(id)
                case 2: classAdmin(id)
                case 3: classLord(id)
                case 4: classImper(id)
                case 5: classMummy(id)
                case 6: classNano(id);
                case 8: g_iCurrentPage[id]++;
            }
        }
        case 1: {
            switch (key) {
                case 0: classZplayer1pg(id);
                case 8: g_iCurrentPage[id]--;
            }
        }
    }
}
 
Последнее редактирование:
Сообщения
107
Реакции
1
@Code_0xABC,Если я добавляю это то у менясразу 26 ерроров
4 Дек 2023
@Code_0xABC,Странно но я добавил ваш код так-же как и смоим менюшка работает но при нажатие 9 закрывается
 
Сообщения
988
Реакции
53
Помог
10 раз(а)
iaws, исправил выше
4 Дек 2023
+ надо теперь посмотреть само создание меню
4 Дек 2023
Нету возможности сделать это с телефона
 
Статус
В этой теме нельзя размещать новые ответы.

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

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