Menu

E-911

Участник
Сообщения
14
Реакции
3
Добрый день.
Как сделать ожидание до момента, когда игрок сделает выбор в меню?

C-подобный:
    Menu menuWeapons = new Menu(actionWeapons,  MENU_ACTIONS_ALL);       
    // имя и заполнение ...
    DisplayMenu(menuWeapons, iClient, MENU_TIME_FOREVER);
        
   // ОЖИДАНИЕ ПОКА НЕ ЗАКРОЕТСЯ МЕНЮ

    if (strlen(selectWeapon) == 0){
        CGOPrintToChat(iClient, "selectWeapon empty");
        
        return Plugin_Handled;
    }

    Menu menuPistol = new Menu(actionPistol, MENU_ACTIONS_ALL);   
       // имя и заполнение ...
    DisplayMenu(menuPistol, iClient, MENU_TIME_FOREVER);
   
    }

Возможность создания второго меню(menuPistol ) в событии (MenuAction_Select) первого(menuWeapons ) мне кажется "не элегантным решением" =)
Хотелось бы узнать о правильном решении.

Создавал переменную bool , чтобы отслеживать закрытие меняя ее в MenuAction_End (не разобрался как проверить меню на существование, что-то типо menuWeapons != null), чтобы получить

while (!close){} естественно это бред (( таймаут вылетает.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Возможность создания второго меню(menuPistol ) в событии (MenuAction_Select) первого(menuWeapons ) мне кажется "не элегантным решением" =)
Если меню никогда не меняют своего содержимого (пункты и их количество не меняются), то таки не элегантное и нужно создавать оба меню при старте плагина, а вызывать уже когда потребуются.
Ну а вызов второго меню таки лучше в поместить в срабатывание MenuAction_Select.
Сообщения автоматически склеены:

Я так в своём плагине выдачи оружия для КСС делал, кстати.
 

E-911

Участник
Сообщения
14
Реакции
3
Все описано: Menu API (SourceMod) - AlliedModders Wiki
Если меню имеет 4+ Action, то лучше использовать switch вместо else if.
Конечно же это читал, но вопрос не в этом(обработке событий). А в том, что вызов идет callback (те выполнение идет построчно, не в зависимости, что выбрал игрок. CGOPrintToChat сработает раньше, чем будет выбор из меню) Ну это я так себе понимаю.
Если меню никогда не меняют своего содержимого (пункты и их количество не меняются), то таки не элегантное и нужно создавать оба меню при старте плагина, а вызывать уже когда потребуются.
Ну а вызов второго меню таки лучше в поместить в срабатывание MenuAction_Select.
Сообщения автоматически склеены:

Я так в своём плагине выдачи оружия для КСС делал, кстати.
Принял- создать при старте (не подумал, единожды создать это выгоднее, чем каждый раз при вызове).

Делаю кастомные раунды на основе (livecustomrounds от xtance ), просто не понравилось решение в данном плагине.
Суть menu собрать настройки для кастомного раунда(оружие, пистолет, команда).
Поэтому нужно создать 3 меню(или одно с заменной данных).
Собрать из них необходимые настройки.
Запустить последующий раунд с этими настройками.
 
Сверху Снизу