Значение квара и проверка квара

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Два вопроса:
Как это можно расписать, что бы понять ограничено авп на 0 или нет?
C-подобный:
        for(int i = 1; i < view_as<int>(CSWeapon_MAX_WEAPONS_NO_KNIFES); i++)
        {
            if(!CSWeapons_IsValidID(view_as<CSWeaponID>(i), true))
            {
                hRestrictCVars[i][CVarTeam_CT] = null;
                hRestrictCVars[i][CVarTeam_T] = null;
                continue;
            }
         
            char szName[80];
            CSWeapons_GetAlias(view_as<CSWeaponID>(i), szName, sizeof(szName), true);
         
            hWeaponNameList.PushString(szName);
         
            Format(cvar, sizeof(cvar), "sm_restrict_%s_t", szName);
            Format(desc, sizeof(desc), "-1 = unrestricted, 0 = restricted, positive numbers = number allowed for Terrorists . Weapon:%s", szName);
            hRestrictCVars[i][CVarTeam_T] = CreateConVar(cvar, "-1", desc);
         
            Format(cvar, sizeof(cvar), "sm_restrict_%s_ct", szName);
            Format(desc, sizeof(desc), "-1 = unrestricted, 0 = restricted, positive numbers = number allowed for Counter-Terrorists. Weapon:%s", szName);
            hRestrictCVars[i][CVarTeam_CT] = CreateConVar(cvar, "-1", desc);
        }
Речь о sm_restrict_awp_t и sm_restrict_awp_ct


Как можно сделать проверку квара как тут

C-подобный:
bool bEnable = GetConVarBool(g_hEnable);
SetConVarBool(g_hEnable, !bEnable);
Если он не является хенделом, а уже изначально идёт булем?

Да бы было более понятен второй вопрос, вот что нужно:

C-подобный:
case MenuAction_Select:
{
    switch(param)
    {
        case 0: DisplayAddUserMenu(client);
        case 1: DisplayEditUsersMenu(client);
        case 2:
        {
            bool bEnable = GetConVarBool(g_hEnable);
            SetConVarBool(g_hEnable, !bEnable);
            PrintToChatAll("%t", bEnable ? "Disable" : "Enable", client);
            DisplayMainAdminMenu(client);
        }
    }
}
У меня переменная g_hEnable была заменена булевой и проблема в том, что меню сломалось
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
где и каким образом была замененаи что там сломалось?
В меню нажимаешь "Включить" - происходит изменения квара с 0 на 1 и меню меняется на "Отключить"
Было так
C-подобный:
new Handle:g_hEnable = INVALID_HANDLE;

public OnPluginStart()
{
    g_hEnable = CreateConVar("sm_enable", "0", "", _, true, 0.0, true, 1.0);
}

public MainAdminMenuHandler(Handle:menu, MenuAction:action, client, param)
{
    switch(action)
    {
        case MenuAction_End:
            CloseHandle(menu);

        case MenuAction_Cancel:
        {
            if(param == MenuCancel_ExitBack && g_hAdminMenu != INVALID_HANDLE)
                DisplayTopMenu(g_hAdminMenu, client, TopMenuPosition_LastCategory);
        }
        
        case MenuAction_Display:
        {
            decl String:szTitle[256];
            Format(szTitle, sizeof(szTitle), "%T", "Main Admin Menu Title", client);
            new Handle:hPanel = Handle:param;
            SetPanelTitle(hPanel, szTitle);
        }

        case MenuAction_DisplayItem:
        {
            decl String:szDisplay[128];
            switch(param)
            {
                case 0: Format(szDisplay, sizeof(szDisplay), "%T", "Add User Item", client);
                case 1: Format(szDisplay, sizeof(szDisplay), "%T", "Edit Users Item", client);
                case 2: Format(szDisplay, sizeof(szDisplay), "%T", GetConVarBool(g_hEnable) ? "Disable" : "Enable", client);
            }
            return RedrawMenuItem(szDisplay);
        }

        case MenuAction_Select:
        {
            switch(param)
            {
                case 0: DisplayAddUserMenu(client);
                case 1: DisplayEditUsersMenu(client);
                case 2:
                {
                    new bool:bEnable = GetConVarBool(g_hEnable);
                    SetConVarBool(g_hEnable, !bEnable);
                    PrintToChatAll("%t", bEnable ? "Disable" : "Enable", client);
                    DisplayMainAdminMenu(client);
                }
            }
        }
    }
    return 0;
}

Стало так

C-подобный:
bool bEnable

public OnPluginStart()
{
    ConVar cvar;
    cvar = CreateConVar("sm_enable", "0", "", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Enable);
    bEnable = cvar.BoolValue;;
}

public void CVarChanged_Enable(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    bEnable = cvar.BoolValue;
}

public MainAdminMenuHandler(Handle:menu, MenuAction:action, client, param)
{
    switch(action)
    {
        case MenuAction_End:
            CloseHandle(menu);
        
        case MenuAction_Cancel:
        {
            if(param == MenuCancel_ExitBack && g_hAdminMenu != INVALID_HANDLE)
                DisplayTopMenu(g_hAdminMenu, client, TopMenuPosition_LastCategory);
        }
        
        case MenuAction_Display:
        {
            decl String:szTitle[256];
            Format(szTitle, sizeof(szTitle), "%T", "Main Admin Menu Title", client);
            new Handle:hPanel = Handle:param;
            SetPanelTitle(hPanel, szTitle);
        }
        
        case MenuAction_DisplayItem:
        {
            decl String:szDisplay[128];
            switch(param)
            {
                case 0: Format(szDisplay, sizeof(szDisplay), "%T", "Add User Item", client);
                case 1: Format(szDisplay, sizeof(szDisplay), "%T", "Edit Users Item", client);
                case 2: Format(szDisplay, sizeof(szDisplay), "%T", bEnable ? "Disable" : "Enable", client);
            }
            return RedrawMenuItem(szDisplay);
        }
        
        case MenuAction_Select:
        {
            switch(param)
            {
                case 0: DisplayAddUserMenu(client);
                case 1: DisplayEditUsersMenu(client);
                case 2:
                {
                    //new bool:bEnable = GetConVarBool(g_hEnable);
                    //SetConVarBool(g_hEnable, !bEnable);
                    PrintToChatAll("%t", bEnable ? "Disable" : "Enable", client);
                    DisplayMainAdminMenu(client);
                }
            }
        }
    }
    
    return 0;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Это что за изврат?
C-подобный:
        case MenuAction_Display:
        {
            decl String:szTitle[256];
            Format(szTitle, sizeof(szTitle), "%T", "Main Admin Menu Title", client);
            new Handle:hPanel = Handle:param;
            SetPanelTitle(hPanel, szTitle);
        }
Если у тебя меню, а не панель, то название меню меняется вот так:
C-подобный:
        case MenuAction_Display:
            SetMenuTitle(menu, "%t", "Main Admin Menu Title");

По идее вот так должно работать:
C-подобный:
bool bEnable;

public OnPluginStart()
{
    ConVar cvar;
    cvar = CreateConVar("sm_enable", "0", "", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Enable);
    bEnable = cvar.BoolValue;
}

public void CVarChanged_Enable(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    bEnable = cvar.BoolValue;
}

public MainAdminMenuHandler(Handle:menu, MenuAction:action, client, param)
{
    switch(action)
    {
        case MenuAction_End:
            CloseHandle(menu);
        case MenuAction_Cancel:
            if(param == MenuCancel_ExitBack && g_hAdminMenu)
                DisplayTopMenu(g_hAdminMenu, client, TopMenuPosition_LastCategory);
        case MenuAction_Display:
            SetMenuTitle(menu, "%t", "Main Admin Menu Title");
        case MenuAction_DisplayItem:
        {
            decl String:buffer[128];
            switch(param)
            {
                case 0: FormatEx(buffer, sizeof(buffer), "%T", "Add User Item", client);
                case 1: FormatEx(buffer, sizeof(buffer), "%T", "Edit Users Item", client);
                case 2: FormatEx(buffer, sizeof(buffer), "%T", bEnable ? "Disable" : "Enable", client);
            }
            return RedrawMenuItem(buffer);
        }
        case MenuAction_Select:
            switch(param)
            {
                case 0: DisplayAddUserMenu(client);
                case 1: DisplayEditUsersMenu(client);
                case 2:
                {
                    bEnable = !bEnable;
                    SetConVarBool(g_hEnable, bEnable);
                    PrintToChatAll("%t", bEnable ? "Disable" : "Enable");
                    DisplayMainAdminMenu(client);
                }
            }
    }
    return 0;
}
 
Последнее редактирование:
Сверху Снизу