Как сделать кнопку назад на PlayerCommands

oleg_nelasy

Участник
Сообщения
664
Реакции
46
C-подобный:
public void StartNoZoomCallback(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
    switch (action)
    {
        case TopMenuAction_DisplayOption:
        {
            //SetGlobalTransTarget(iClient);
            FormatEx(sBuffer, maxlength, "111111111", iClient);
        }
        case TopMenuAction_SelectOption:
        {
            //PrintToChatAll("{default} next round alert");
            //replacement_names(iClient);
            players(iClient);
        }
    }
}

public void players(int iClient)
{
    char name[255];
    char Player[255];
    Menu hMenuPistols = new Menu(Menu_players, MenuAction_Select);
    hMenuPistols.SetTitle("Выберете игрока");
  
    for (int i = 1; i <= MaxClients; i++)
        if (IsClientInGame(i) && !IsFakeClient(i))
        {
            GetClientName(i, name, sizeof(name))
            FormatEx(Player, sizeof(Player), "Player %d", i);
            //PrintToChatAll("Player = %s", Player)
            hMenuPistols.AddItem(Player, name);
        }      
    //hMenuPistols.InsertItem(8, "back", "Назад", ITEMDRAW_DISABLED);          
    hMenuPistols.Display(iClient, 0);
}

По поводу что куски кода из разных плагинов брал как пример названия еще не менял.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Пример:
C-подобный:
SetMenuExitBackButton(menu, true);
с этим разобрался везде работает остался один вопрос как вернутся в меню управление игроками?


C-подобный:
public void OnAdminMenuReady(Handle aTopMenu)
{
    TopMenu hTopMenu = TopMenu.FromHandle(aTopMenu);

    if (hTopMenu == g_hAdminMenu)
        return;

    g_hAdminMenu = hTopMenu;

    TopMenuObject hCategory = g_hAdminMenu.FindCategory("PlayerCommands");

    if (hCategory != INVALID_TOPMENUOBJECT)
        g_hAdminMenu.AddItem("AdminStart", StartNoZoomCallback, hCategory, "start_nozoom", ADMFLAG_BAN);   //&& ReadFlagString(g_adminmenu) ADMFLAG_BAN
}

public void StartNoZoomCallback(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
    switch (action)
    {
        /*case TopMenuAction_DrawOption:
        {
             //sBuffer[0] = ITEMDRAW_DISABLED;  
             PrintToChatAll("test");
        }*/
        case TopMenuAction_DisplayOption:
        {
            //SetGlobalTransTarget(iClient);
            FormatEx(sBuffer, maxlength, "111111111", iClient);
        }
        case TopMenuAction_SelectOption:
        {
            //PrintToChatAll("{default} next round alert");
            //replacement_names(iClient);
            players(iClient);
        }
    }
}        

case MenuAction_Cancel:    // Меню было отменено
        {
            if(iItem == MenuCancel_ExitBack)    // Если игрок нажал кнопку "Назад"
            {
                // Отправим ему сообщение что нет возможности вернуться назад.
                // Бывает же что конопку "Назад" назад добавили там, где это не нужно
                PrintToChat(iClient, "1Извините, но назад вернуться нельзя!");
                PlayerCommands(iClient);
            }
        }
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
как вернутся в меню управление игроками?
Думаю, нужно в начало файла добавить
C-подобный:
#include <adminmenu>
А менюшка с управлением игроками - это ADMINMENU_PLAYERCOMMANDS
Но это не точно, я не делал подобного
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Думаю, нужно в начало файла добавить
C-подобный:
#include <adminmenu>
А менюшка с управлением игроками - это ADMINMENU_PLAYERCOMMANDS
Но это не точно, я не делал подобного
#include <adminmenu> и так используется
В а первом блоке кода добовляю в PlayerCommands пункт 111111111

C-подобный:
public void OnAdminMenuReady(Handle aTopMenu)
{
    TopMenu hTopMenu = TopMenu.FromHandle(aTopMenu);

    if (hTopMenu == g_hAdminMenu)
        return;

    g_hAdminMenu = hTopMenu;

    TopMenuObject hCategory = g_hAdminMenu.FindCategory("PlayerCommands");

    if (hCategory != INVALID_TOPMENUOBJECT)
        g_hAdminMenu.AddItem("AdminStart", StartNoZoomCallback, hCategory, "start_nozoom", ADMFLAG_BAN);   //&& ReadFlagString(g_adminmenu) ADMFLAG_BAN
}

public void StartNoZoomCallback(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
    switch (action)
    {
        /*case TopMenuAction_DrawOption:
        {
             //sBuffer[0] = ITEMDRAW_DISABLED;
             PrintToChatAll("test");
        }*/
        case TopMenuAction_DisplayOption:
        {
            //SetGlobalTransTarget(iClient);
            FormatEx(sBuffer, maxlength, "111111111", iClient);
        }
        case TopMenuAction_SelectOption:
        {
            //PrintToChatAll("{default} next round alert");
            //replacement_names(iClient);
            players(iClient);
        }
    }
}

Дальше у меня идет меню в несколько уровней все везде работает только как с первого уровня вернуть в родительский PlayerCommands

Как возвращаюсь из 2 уровня в первый

C-подобный:
case MenuAction_Cancel:    // Меню было отменено
        {
            if(iItem == MenuCancel_ExitBack)    // Если игрок нажал кнопку "Назад"
            {
                //PrintToChat(iClient, "Извините, но назад вернуться нельзя!");
                players(iClient);
            }
        }

а вот как открыть 1 первого уровнять управления игроками без понятия. Подскажите функцию для вызова ADMINMENU_PLAYERCOMMANDS
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
Подскажите функцию для вызова ADMINMENU_PLAYERCOMMANDS
Ну, наверное вот это:
C-подобный:
TopMenuObject player_commands = hTopMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS);
Будет меню в плагине называться player_commands, куда ты потом и будешь перекидывать после нажатия кнопки
Но я смотрю, в своём коде ты его уже назвал hCategory, так что это будет лишним добавлять ещё один объект
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Ну, наверное вот это:
C-подобный:
TopMenuObject player_commands = hTopMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS);
Будет меню в плагине называться player_commands, куда ты потом и будешь перекидывать после нажатия кнопки
Но я смотрю, в своём коде ты его уже назвал hCategory, так что это будет лишним добавлять ещё один объект
Если я тебя правильно понял

C-подобный:
public void playercommands(int iClient)
{
    Handle hTopMenu;
    TopMenuObject player_commands = hTopMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS);
}  

case MenuAction_Cancel:    // Меню было отменено
        {
            if(iItem == MenuCancel_ExitBack)    // Если игрок нажал кнопку "Назад"
            {
                playercommands(iClient);
            }
        }

В таком случаи error 105: cannot find method or property Handle.FindCategory
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Конкретизирую вопрос.
Есть код
C-подобный:
public int Menu_players(Menu menu, MenuAction action, int iClient, int iItem)
{
    int t;
    //char name[255];
    switch (action)
    {
        case MenuAction_Select:
        {
            for (int i = 1; i <= MaxClients; i++)
            if (IsClientInGame(i) && !IsFakeClient(i)) //&& IsPlayerAlive(iClient)
            {
                t=i-1;
                if(iItem == t)
                {
                    //GetClientName(i, name, sizeof(name))
                    //PrintToChatAll("Nмя выбраного игрока %s индекс равен %d", name, i);  
                    g_player = i;
                    replacement_names(iClient);
                }  
            }
        }
        case MenuAction_Cancel:    // Меню было отменено
        {
            if(iItem == MenuCancel_ExitBack)    // Если игрок нажал кнопку "Назад"
            {
                Нужно открыть админ меню раздел управление игроками помогите!!!
            }
        }
    }
}

По нажатию кнопки назад нужно открыть адин меню раздел управление игроками для iClient.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@oleg_nelasy,
C-подобный:
        case MenuAction_Cancel:
        {
            if(iItem == MenuCancel_ExitBack && hTopMenu != null)
                hTopMenu.DisplayCategory(hTopMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS), client);
        }
hTopMenu - это хэндл админского меню
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@oleg_nelasy,
C-подобный:
        case MenuAction_Cancel:
        {
            if(iItem == MenuCancel_ExitBack && hTopMenu != null)
                hTopMenu.DisplayCategory(hTopMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS), client);
        }
hTopMenu - это хэндл админского меню
Получил ошибку error 105: cannot find method or property Handle.DisplayCategory
Пробовал #include <topmenus> результат тот же

C-подобный:
case MenuAction_Cancel:    // Меню было отменено
    {
        if(iItem == MenuCancel_ExitBack && hTopMenu1 != null)    // Если игрок нажал кнопку "Назад"
        {
            hTopMenu1.DisplayCategory(hTopMenu1.FindCategory(ADMINMENU_PLAYERCOMMANDS), client);
        }
    }
Сообщения автоматически склеены:

Вопрос решен всем спасибо
 
Последнее редактирование:
Сверху Снизу