Ошибки с меню cs:go

SaEeS

Участник
Сообщения
7
Реакции
0
L 08/16/2020 - 18:25:17: [SM] Exception reported: Handle b7c0951 is invalid (error 3)
L 08/16/2020 - 18:25:17: [SM] Blaming: plugin123.smx
L 08/16/2020 - 18:25:17: [SM] Call stack trace:
L 08/16/2020 - 18:25:17: [SM] [0] CloseHandle
L 08/16/2020 - 18:25:17: [SM] [1] Line 211, C:\Users\user\Desktop\server\scripting\vadoska.sp::ClanMenuHandler_GMenu


C-подобный:
    switch(action)
    {
        case MenuAction_End: delete hClanMenu; // Ругается на эту строчку
        case MenuAction_Cancel:
        {
            if (IsClientInGame(client) && iItem == MenuCancel_Exit)    InternalShowMenu(client, "\10", 1);
            if (IsClientInGame(client) && iItem == MenuCancel_ExitBack)
            {
                hClanMenu.RemoveAllItems();
                hClanMenu.SetTitle("Описание");
                AddMenuItem(hClanMenu ,"1", "1 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "2", "2 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "3", "3 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "4", "4 пункт", g_osnovatel[client] ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "6", "5 пункт", g_osnovatel[client] ? ITEMDRAW_DEFAULT : ITEMDRAW_DISABLED);

                DisplayMenu(hClanMenu, client, 45);
            }
        }

Не понимаю даже почему он ругается, много чего попробывал никак не работает, помогите плез
 
Последнее редактирование:

SaEeS

Участник
Сообщения
7
Реакции
0
C-подобный:
public int ClanMenuHandler_GMenu(Menu hClanMenu, MenuAction action, int client, int iItem)
{
    switch(action)
    {
        case MenuAction_End: delete hClanMenu;
        case MenuAction_Cancel:
        {
            if (IsClientInGame(client) && iItem == MenuCancel_Exit)    InternalShowMenu(client, "\10", 1);
            if (IsClientInGame(client) && iItem == MenuCancel_ExitBack)
            {
                hClanMenu.RemoveAllItems();
                hClanMenu.SetTitle("Описание");
                AddMenuItem(hClanMenu ,"1", "1 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "2", "2 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "3", "3 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "4", "4 пункт", g_osnovatel[client] ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu, "6", "5 пункт", g_osnovatel[client] ? ITEMDRAW_DEFAULT : ITEMDRAW_DISABLED);

                DisplayMenu(hClanMenu, client, 45);
            }
        }
        case MenuAction_Select:
        {
            char szInfo[64], szQuery[256], szAuth[32];
            hClanMenu.GetItem(iItem, szInfo, sizeof(szInfo));
            if(!strcmp(szInfo, "5"))
            {
                GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
                FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `idclan`, `name` FROM `table_stats` WHERE `auth` = '%s';", szAuth);
                g_hDatabaseClan.Query(SQL_Callback_SelectClient, szQuery, GetClientUserId(client));
            }
            if(!strcmp(szInfo, "6"))
            {   
                GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
                FormatEx(szQuery, sizeof(szQuery), "DELETE FROM `table_stats` WHERE `idclan` = %i;", g_osnovatel[client]);
                g_hDatabaseClan.Query(SQL_Callback_CheckError, szQuery);
                FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `idclan`, `osnovatel` FROM `table_stats` WHERE `auth` = '%s';", szAuth);
                g_hDatabaseClan.Query(SQL_Callback_GetClient, szQuery, GetClientUserId(client));
            }
            if(!strcmp(szInfo, "2"))
            {
                ShowPlayersMenuClan(client);
            }
        }
    }
    return 0;
}
Насчёт ошибки в консоли больше ничего не пишет
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
OMG, определять выбранный пункт меню через strcmp (да ещё не использовать else, как будто можно выбрать сразу несколько пунктов)
Ещё и доступны для выбора, но никак не обрабатывается 3 пункта меню.
Ну и ещё в листинге нет строк, где создаётся меню (там где ссылается на ClanMenuHandler_GMenu).
 

SaEeS

Участник
Сообщения
7
Реакции
0
Насчёт выбирания пункта не через strcmp подсказал бы что ли, на else if поменял, а ссылаться на меню не знаю зачем, есть же hClanMenu уже, или я не понимаю чего-то?
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
!strcmp(szInfo, "1") замени на iItem == 0
А дальше поймешь, что к чему
Сообщения автоматически склеены:

Насчёт выбирания пункта не через strcmp подсказал бы что ли, на else if поменял, а ссылаться на меню не знаю зачем, есть же hClanMenu уже, или я не понимаю чего-то?
Лучше будет пересоздать меню
 
Последнее редактирование:

Amirsz

Релаксируем... Ну хотя бы пытаемся
Сообщения
261
Реакции
81
Естественно ошибка, у тебя когда меню закрывается, удаляется Handle меню. И при переходе назад, он пытается показать меню, которое ты уже удалил.
C-подобный:
case MenuAction_End: delete hClanMenu;
 

SaEeS

Участник
Сообщения
7
Реакции
0
Естественно ошибка, у тебя когда меню закрывается, удаляется Handle меню. И при переходе назад, он пытается показать меню, которое ты уже удалил.
C-подобный:
case MenuAction_End: delete hClanMenu;
Да я просто начал создавать новое меню как и говорили и это помогло, а нужно ли удалять, то меню, которое я создаю новое? И если да, то как его удалить? В том же MenuAction_End?

C-подобный:
public int ClanMenuHandler_GMenu(Menu hClanMenu, MenuAction action, int client, int iItem)
{
    switch(action)
    {
        case MenuAction_End: delete hClanMenu;
        case MenuAction_Cancel:
        {
            if (IsClientInGame(client) && iItem == MenuCancel_Exit)    InternalShowMenu(client, "\10", 1);
            if (IsClientInGame(client) && iItem == MenuCancel_ExitBack)
            {  
                Menu hClanMenu1 = new Menu(ClanMenuHandler_GMenu);
                hClanMenu1.RemoveAllItems();
                hClanMenu1.SetTitle("Описание");
                AddMenuItem(hClanMenu1 ,"1", "1 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "2", "2 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "3", "3 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "4", "4 пункт", g_osnovatel[client] ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "6", "5 пункт", g_osnovatel[client] ? ITEMDRAW_DEFAULT : ITEMDRAW_DISABLED);

                DisplayMenu(hClanMenu1, client, 45);
            }
        }
        case MenuAction_Select:
        {
            char szInfo[64], szQuery[256], szAuth[32];
            hClanMenu.GetItem(iItem, szInfo, sizeof(szInfo));
            if(iItem == 0)
            {
                if(!strcmp(szInfo, "5"))
                {
                GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
                FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `idclan`, `name` FROM `table_stats` WHERE `auth` = '%s';", szAuth);
                g_hDatabaseClan.Query(SQL_Callback_SelectClient, szQuery, GetClientUserId(client));
                }
            }
            else if(iItem == 4)
            {  
                GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
                FormatEx(szQuery, sizeof(szQuery), "DELETE FROM `table_stats` WHERE `idclan` = %i;", g_osnovatel[client]);
                g_hDatabaseClan.Query(SQL_Callback_CheckError, szQuery);
                FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `idclan`, `osnovatel` FROM `table_stats` WHERE `auth` = '%s';", szAuth);
                g_hDatabaseClan.Query(SQL_Callback_GetClient, szQuery, GetClientUserId(client));
            }
            else if(iItem == 1)
            {
                ShowPlayersMenuClan(client);
            }
        }
    }
    return 0;
}
 

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
Да я просто начал создавать новое меню как и говорили и это помогло, а нужно ли удалять, то меню, которое я создаю новое? И если да, то как его удалить? В том же MenuAction_End?

C-подобный:
public int ClanMenuHandler_GMenu(Menu hClanMenu, MenuAction action, int client, int iItem)
{
    switch(action)
    {
        case MenuAction_End: delete hClanMenu;
        case MenuAction_Cancel:
        {
            if (IsClientInGame(client) && iItem == MenuCancel_Exit)    InternalShowMenu(client, "\10", 1);
            if (IsClientInGame(client) && iItem == MenuCancel_ExitBack)
            { 
                Menu hClanMenu1 = new Menu(ClanMenuHandler_GMenu);
                hClanMenu1.RemoveAllItems();
                hClanMenu1.SetTitle("Описание");
                AddMenuItem(hClanMenu1 ,"1", "1 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "2", "2 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "3", "3 пункт", ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "4", "4 пункт", g_osnovatel[client] ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT);
                AddMenuItem(hClanMenu1, "6", "5 пункт", g_osnovatel[client] ? ITEMDRAW_DEFAULT : ITEMDRAW_DISABLED);

                DisplayMenu(hClanMenu1, client, 45);
            }
        }
        case MenuAction_Select:
        {
            char szInfo[64], szQuery[256], szAuth[32];
            hClanMenu.GetItem(iItem, szInfo, sizeof(szInfo));
            if(iItem == 0)
            {
                if(!strcmp(szInfo, "5"))
                {
                GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
                FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `idclan`, `name` FROM `table_stats` WHERE `auth` = '%s';", szAuth);
                g_hDatabaseClan.Query(SQL_Callback_SelectClient, szQuery, GetClientUserId(client));
                }
            }
            else if(iItem == 4)
            { 
                GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
                FormatEx(szQuery, sizeof(szQuery), "DELETE FROM `table_stats` WHERE `idclan` = %i;", g_osnovatel[client]);
                g_hDatabaseClan.Query(SQL_Callback_CheckError, szQuery);
                FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `idclan`, `osnovatel` FROM `table_stats` WHERE `auth` = '%s';", szAuth);
                g_hDatabaseClan.Query(SQL_Callback_GetClient, szQuery, GetClientUserId(client));
            }
            else if(iItem == 1)
            {
                ShowPlayersMenuClan(client);
            }
        }
    }
    return 0;
}
В MenuCancel_ExitBack достаточно вызвать функцию, которая ссылается на ClanMenuHandler_GMenu, зачем по новой писать кучу строчек кода.
Каждое новое меню, вызывает для старого MenuAction_End.
 

SaEeS

Участник
Сообщения
7
Реакции
0
В MenuCancel_ExitBack достаточно вызвать функцию, которая ссылается на ClanMenuHandler_GMenu, зачем по новой писать кучу строчек кода.
Каждое новое меню, вызывает для старого MenuAction_End.
Спасибо, она у меня вызывалась через команду и я сделал отдельную функцию для вызова меню, помогло.
Всем спасибо!!!!!!!!!!!!!!
 
Сверху Снизу