Не правильно передаются данные меню

Сообщения
10
Реакции
0
Почему нажимаешь на пункт "Служебное Меню", выдает ikey = 0, т.е работает так, как будто нажал "0"
https://i.ibb.co/fXrFrhr/image.png
Код:
#include <amxmodx>
#include <amxmisc>

public plugin_init() {
      register_clcmd("test", "mainMenu")
}


public mainMenu(id){
    new mainMenu = menu_create("\rГлавное меню", "procesMainMenu")

    menu_additem(mainMenu, "Пунк #1", "1", 0)
    menu_addtext(mainMenu, "\r_____________________", 0)
    menu_additem(mainMenu, "\rСлужебное Меню", "3", 0)
 
    menu_setprop(mainMenu, MPROP_EXITNAME, "Выход")
    menu_display(id, mainMenu, 0)
 
    return PLUGIN_HANDLED
}


public procesMainMenu(id, mainMenu, item){
    new iAccessMainMenu, iCallbackMainMenu, sDataMainMenu[6], sNameMainMenu[32]
    menu_item_getinfo(mainMenu, item, iAccessMainMenu, sDataMainMenu, charsmax(sDataMainMenu), sNameMainMenu, charsmax(sNameMainMenu), iCallbackMainMenu)
 
    new ikey = str_to_num(sDataMainMenu)
    switch(ikey){
        case 0:{
            log_amx("ikey = %d", ikey)
            menu_destroy(mainMenu)

            return PLUGIN_HANDLED
        }
     
        case 1:{
            log_amx("ikey = %d", ikey)
            menu_destroy(mainMenu)
     
            return PLUGIN_HANDLED
        }



        case 3:{

            log_amx("ikey = %d", ikey)
            menu_destroy(mainMenu)
         
            return PLUGIN_HANDLED
        }
    }
 
    return PLUGIN_HANDLED
}
PS: 1-ое изображение удалите, не удаляется
 

Вложения

Последнее редактирование:
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Может потому что тебе нужен item а не ikey?
 
Сообщения
10
Реакции
0
Может потому что тебе нужен item а не ikey?
ikey - это третий параметр menu_additem
menu_additem(mainMenu, "Пунк #1", "1", 0)
item - это номер пункта меню, начиная с 0-ля

нажимаешь первый пункт
ikey - "1", item - "0"
нажимаешь третий пункт
ikey - "0", item - "-3"

В коде исправил с
menu_additem(mainMenu, "\rСлужебное Меню", "3", 0)
на
menu_additem(mainMenu, "\rСлужебное Меню", "3", 1)
18 Дек 2018
item - это третий параметр
 
Последнее редактирование:
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
В коде исправил с
Код:
/**
* Adds an menu to a menu.
*
* @param menu            Menu resource identifier.
* @param name            Item text to display.
* @param info            Item info string for internal information.
* @param paccess        Access required by the player viewing the menu.
* @param callback        If set to a valid ID from menu_makecallback(), the
*                        callback will be invoked before drawing the item.
* @noreturn
* @error                Invalid menu resource.
*/
native menu_additem(menu, const name[], const info[]="", paccess=0, callback=-1);
ты поменял это:
* @param paccess Access required by the player viewing the menu.
для читаемости
menu_item_getinfo(mainMenu, item, iAccessMainMenu, sDataMainMenu, charsmax(sDataMainMenu), sNameMainMenu, charsmax(sNameMainMenu), iCallbackMainMenu)
->
menu_item_getinfo(mainMenu, item, iAccessMainMenu, sDataMainMenu, charsmax(sDataMainMenu), .callback = iCallbackMainMenu)

и вынеси логирование кнопок из свитча(поставь перед ним)
и выложи сюда логи(сделай такие log_amx("[%s] ikey = %d", sDataMainMenu, ikey);), где ты нажимаешь 1, 3 и 0
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
C++:
menu_addtext(mainMenu, "\r_____________________", 0)
=>
menu_addtext2(mainMenu, "\r_____________________")
 
Сообщения
10
Реакции
0
Спутал, сори, поменял НЕ
menu_addtext(mainMenu, "\r_____________________", 0)
а menu_addtext, с
menu_addtext(mainMenu, "\r_____________________", 0)
на
menu_addtext(mainMenu, "\r_____________________", 1)
А то кнопка выхода была под номером 9, до того, как поменял
меню.png
Код:
#include <amxmodx>
#include <amxmisc>

public plugin_init() {
      register_clcmd("test", "mainMenu")
}


public mainMenu(id){
    new mainMenu = menu_create("\rГлавное меню", "procesMainMenu")

    menu_additem(mainMenu, "Пунк #1", "1", 0)
    menu_addtext(mainMenu, "\r_____________________", 1)
    menu_additem(mainMenu, "\rСлужебное Меню", "3", 0)
 
    menu_setprop(mainMenu, MPROP_EXITNAME, "Выход")
    menu_display(id, mainMenu, 0)
 
    return PLUGIN_HANDLED
}


public procesMainMenu(id, mainMenu, item){
    new iAccessMainMenu, iCallbackMainMenu, sDataMainMenu[6], sNameMainMenu[32]
    menu_item_getinfo(mainMenu, item, iAccessMainMenu, sDataMainMenu, charsmax(sDataMainMenu), sNameMainMenu, charsmax(sNameMainMenu), iCallbackMainMenu)
 
        new ikey = str_to_num(sDataMainMenu)
     
        log_amx("ikey = %d", ikey)
        log_amx("item = %d", item)
         
        switch(ikey){
        case 0:{
            menu_destroy(mainMenu)
            return PLUGIN_HANDLED
        }
     
        case 1:{
            menu_destroy(mainMenu)
            return PLUGIN_HANDLED
        }

        case 3:{
            menu_destroy(mainMenu)
            return PLUGIN_HANDLED
        }
    }
 
    return PLUGIN_HANDLED
}
Нажал сначало 0, потом 1 и 3
L 12/18/2018 - 23:45:00: [test.amxx] ikey = 0
L 12/18/2018 - 23:45:00: [test.amxx] item = -3
L 12/18/2018 - 23:45:04: [test.amxx] ikey = 1
L 12/18/2018 - 23:45:04: [test.amxx] item = 0
L 12/18/2018 - 23:45:06: [test.amxx] ikey = 0
L 12/18/2018 - 23:45:06: [test.amxx] item = -3
18 Дек 2018
zhorzh78
menu_addtext(mainMenu, "\r_____________________", 0)
=>
menu_addtext2(mainMenu, "\r_____________________")
ничего не поменялось
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Если айтем равен -3, то нажата кнопка MENU_EXIT (выход).
Код:
#define MENU_TIMEOUT    -4
#define MENU_EXIT       -3
#define MENU_BACK       -2
#define MENU_MORE       -1
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
ничего не поменялось
и не должно было...

Код:
public procesMainMenu(id, mainMenu, item){
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new iAccessMainMenu, iCallbackMainMenu, sDataMainMenu[6]
    menu_item_getinfo(mainMenu, item, iAccessMainMenu, sDataMainMenu, charsmax(sDataMainMenu), .callback = iCallbackMainMenu)
  
        new ikey = str_to_num(sDataMainMenu)
      
    log_amx("[item %d][data %s] ikey = %d", item, sDataMainMenu, ikey)
    
    menu_destroy(menu);
    return PLUGIN_HANDLED
}
18 Дек 2018
zhorzh78, ты же понимаешь, что menu_addtext(.slot = 1) равен menu_addtext2 ?
 
Сообщения
10
Реакции
0
Если айтем равен -3, то нажата кнопка MENU_EXIT (выход).
по идеи да, но я не нажимал ВЫХОД
ВСЕ ПРАВИЛЬНО РАБОТАЕТ, если оставить в menu_addtext, параметр 0, а не 1
menu_addtext(mainMenu, "\r_____________________", 0)
ТОЛЬКО В ЭТОМ СЛУЧАЕ кнопка ВЫХОД под номером "9", а не 0, мне это не нравится
В этом случае нажимаешь на Служебное Меню, ikey = 3, item = 1(а не -3)
 
Последнее редактирование:
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Пример меню
Код:
public procesMainMenu(id, menu, item) {
    if (item == MENU_EXIT) {
        menu_destroy(menu);
    }
    
    if (item < 0) {
        return PLUGIN_HANDLED;
    }
    
    new data[3], dummy[1];
    menu_item_getinfo(menu, item, dummy[0], data, charsmax(data), dummy, 0, dummy[0]);
    menu_destroy(menu);
    
    switch (str_to_num(data)) {
        case 1: {
            // Some code
        }
      
        case 3: {
            // Some code
        }
    }
 
    return PLUGIN_HANDLED;
}
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
434
Реакции
296
Помог
5 раз(а)
scottic, Зачем ты нумеруешь итемы через инфу передаваемую с ними? В item и так хранится id итема... ТЫ можешь по нему проверять...
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
ArKaNeMaN, item не обьязательно должен быть равен номеру елемента. При чем в даном случае идет пропуск второго элемента
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
434
Реакции
296
Помог
5 раз(а)
fantom, разве? При каких условиях?
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Зачем ты нумеруешь итемы через инфу передаваемую с ними? В item и так хранится id итема... ТЫ можешь по нему проверять...
Потому что Item- порядковый номер. А если мне надо сделать пропуск клавиши 2 (например) или другой порядок.
menu_addtext(mainMenu, "\r_____________________", 1)
menu_additem(mainMenu, "\rСлужебное Меню", "3", 0)
menu_additem(mainMenu, "Пунк #1", "1", 0)
 
Сообщения
10
Реакции
0
Зачем ты нумеруешь итемы через инфу передаваемую с ними? В item и так хранится id итема... ТЫ можешь по нему проверять...
можно по разному делать, ну если item не верно передается лучше работать не будет
Когда я нажимаю на СЛУЖЕБНОЕ МЕНЮ, item передается как будто нажимаю на ВЫХОД
18 Дек 2018
Не поленюсь проверить
Я еще раз проверил, у меня ничего не поменялось, может дело в версии amxx у меня 1.8.3
18 Дек 2018
наберите в консоле сервера amxx version
 
Сообщения
10
Реакции
0
Может нужно показывать свои изменения...
проверил на самом старом и на самом новом amx, не на одной не работает и не гоните что у вас работает
может у вас работает, когда
menu_addtext(mainMenu, "\r_____________________", 1)
тогда да или проверяли item-ы ДО строки menu_addtext
мне надо чтоб
menu_addtext(mainMenu, "\r_____________________", 0)
Чтоб меню ВЫХОДА было с 0-ем, а не 9-ой

PS: под Linux-ом не проверял, может там норм работает
 
Последнее редактирование:

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

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