Amxmodmenu

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
9
Реакции
0
Добрый день. Помогите реализовать идею. В меню добавить к примеру пункт дополнительно, а в нем буду пункты к примеру настройка статистики, так же чтобы эти пункты можно было добавлять в ini файл

Код:
#include <amxmodx>
#tryinclude <gamecms5>    // Срок админки GameCMS(раскомментировать, если надо).

#define SECONDS_IN_DAY    86400    // Не трогать!

enum _:MenuData
{
    ItemName[64],
    ItemCmd[32],
    ItemFlag
};

new Array:g_eMenuData;

enum _:MenuSettings
{
    MenuName[64],
    MenuCmd[32],
    MenuPage[4],
    MenuFlag
};

new g_eMenuSettings[MenuSettings];

new g_iMenusNum;
new g_iMenuPos[MAX_PLAYERS + 1];

public plugin_precache()
{
    new szPath[128], iLen = get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
    formatex(szPath[iLen], charsmax(szPath) - iLen, "/amxmodmenu/amxmodmenu.ini");
    new hFile = fopen(szPath, "rt");
    if(!hFile)
    {
        set_fail_state("Can't %s '%s'", file_exists(szPath) ? "read" : "find", szPath);
        return;
    }

    g_eMenuData = ArrayCreate(MenuData);

    new szLine[128], szType[24], szName[64], szCmd[32], szFlag[4], szMenuData[MenuData];

    while(!feof(hFile))
    {
        fgets(hFile, szLine, charsmax(szLine));
        Str_RemoveComment(szLine);
        trim(szLine);

        if(parse(szLine, szType, charsmax(szType), szCmd, charsmax(szCmd)) == 2)
        {
            if(szType[0] == EOS)
            {
                continue;
            }

            if(equali(szType, "display_menu_page"))
            {
                copy(g_eMenuSettings[MenuPage], charsmax(g_eMenuSettings[MenuPage]), szCmd);
                continue;
            }
        }

        if(parse(szLine, szType, charsmax(szType), szName, charsmax(szName), szCmd, charsmax(szCmd), szFlag, charsmax(szFlag)) == 4)
        {
            if(szType[0] == EOS)
            {
                continue;
            }

            replace_all(szName, charsmax(szName), "^^n", "^n");
            replace_all(szName, charsmax(szName), "^^t", "^t");

            if(equali(szType, "reg_main_menu"))
            {
                copy(g_eMenuSettings[MenuName], charsmax(g_eMenuSettings[MenuName]), szName);
                copy(g_eMenuSettings[MenuCmd], charsmax(g_eMenuSettings[MenuCmd]), szCmd);
                g_eMenuSettings[MenuFlag] = read_flags(szFlag);
            }
            else if(equali(szType, "add_menu_item"))
            {
                copy(szMenuData[ItemName], charsmax(szMenuData[ItemName]), szName);
                copy(szMenuData[ItemCmd], charsmax(szMenuData[ItemCmd]), szCmd);
                szMenuData[ItemFlag] = read_flags(szFlag);

                ArrayPushArray(g_eMenuData, szMenuData);
            }
        }
    }

    fclose(hFile);

    g_iMenusNum = ArraySize(g_eMenuData);
}

public plugin_init()
{
    register_plugin("[Customizable] AmxModMenu", "0.0.5", "Albertio");

    register_concmd(g_eMenuSettings[MenuCmd], "AmxModMenu_Cmd", g_eMenuSettings[MenuFlag]);

    register_menucmd(register_menuid("AmxModMenu"), 1023, "AmxModMenu_Handler");
}

public AmxModMenu_Cmd(id, iFlag)
{
    if(~get_user_flags(id) & iFlag)
    {
        console_print(id, "У вас недостаточно прав для использования этой команды");
        return PLUGIN_HANDLED;
    }
    
    AmxModMenu_Display(id, g_iMenuPos[id] = 0);

    return PLUGIN_HANDLED;
}

public AmxModMenu_Display(id, iPos)
{
    if(iPos < 0)
    {
        return PLUGIN_HANDLED;
    }

    new szMenu[MAX_MENU_LENGTH], iLen;

#if defined _gamecms5_included
    new iExpTime = cmsapi_service_timeleft(id), iSysTime = get_systime();

    if(iExpTime - iSysTime > 0)
    {
        new iFinalTime = (iExpTime - iSysTime) / SECONDS_IN_DAY;

        if(iFinalTime > 0)
        {
            if(g_eMenuSettings[MenuPage][0] == '1')
            {
                iLen = formatex(szMenu, charsmax(szMenu), "%s\R\y%d/%d^n\wОсталось \r%d \wдней^n^n", g_eMenuSettings[MenuName],
                iPos + 1, (g_iMenusNum / 8) + (((g_iMenusNum % 8) > 0) ? 1 : 0), iFinalTime);
            }
            else
            {
                iLen = formatex(szMenu, charsmax(szMenu), "%s^n\wОсталось \r%d \wдней^n^n", g_eMenuSettings[MenuName], iFinalTime);
            }
        }
        else
        {
            if(g_eMenuSettings[MenuPage][0] == '1')
            {
                iLen = formatex(szMenu, charsmax(szMenu), "%s\R\y%d/%d^n\rПоследний \wдень^n^n",
                g_eMenuSettings[MenuName], iPos + 1, (g_iMenusNum / 8) + (((g_iMenusNum % 8) > 0) ? 1 : 0));
            }
            else
            {
                iLen = formatex(szMenu, charsmax(szMenu), "%s^n\rПоследний \wдень^n^n", g_eMenuSettings[MenuName]);
            }
        }
    }
    else if(iExpTime == 0)
    {
        if(g_eMenuSettings[MenuPage][0] == '1')
        {
            iLen = formatex(szMenu, charsmax(szMenu), "%s\R\y%d/%d^n\wПрава \yне ограничены^n^n",
            g_eMenuSettings[MenuName], iPos + 1, (g_iMenusNum / 8) + (((g_iMenusNum % 8) > 0) ? 1 : 0));
        }
        else
        {
            iLen = formatex(szMenu, charsmax(szMenu), "%s^n\wПрава \yне ограничены^n^n", g_eMenuSettings[MenuName]);
        }
    }
#else
    if(g_eMenuSettings[MenuPage][0] == '1')
    {
        iLen = formatex(szMenu, charsmax(szMenu), "%s\R\y%d/%d^n^n", g_eMenuSettings[MenuName],
        iPos + 1, (g_iMenusNum / 8) + (((g_iMenusNum % 8) > 0) ? 1 : 0));
    }
    else
    {
        iLen = formatex(szMenu, charsmax(szMenu), "%s^n^n", g_eMenuSettings[MenuName]);
    }
#endif

    new iKeys = MENU_KEY_0, iStart = iPos * 8, iEnd = min(iStart + 8, g_iMenusNum), iNum, szMenuData[MenuData];

    if(iStart >= g_iMenusNum)
    {
        iStart = iPos = g_iMenuPos[id] = 0;
    }
    
    for(new i = iStart, iFlags = get_user_flags(id); i < iEnd; i++)
    {
        ArrayGetArray(g_eMenuData, i, szMenuData);

        if(iFlags & szMenuData[ItemFlag])
        {
            iKeys |= (1<<iNum);
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r%d. \w%s^n", ++iNum, szMenuData[ItemName]);
        }
        else
        {
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d%d. %s^n", ++iNum, szMenuData[ItemName]);
        }
    }

    if(iEnd != g_iMenusNum)
    {
        iKeys |= MENU_KEY_9
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r9. \wДалее^n\r0. \w%s", iPos ? "Назад" : "Выход");
    }
    else
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r0. \w%s", iPos ? "Назад" : "Выход");
    }

    return show_menu(id, iKeys, szMenu, -1, "AmxModMenu");
}

public AmxModMenu_Handler(id, key)
{
    switch(key)
    {
        case 8:
        {
            AmxModMenu_Display(id, ++g_iMenuPos[id]);
        }
        case 9:
        {
            AmxModMenu_Display(id, --g_iMenuPos[id]);
        }
        default:
        {
            new szMenuData[MenuData];
            ArrayGetArray(g_eMenuData, g_iMenuPos[id] * 8 + key, szMenuData);

            new szMenuCmd[32];
            copy(szMenuCmd, charsmax(szMenuCmd), szMenuData[ItemCmd]);

            if(szMenuCmd[0] == 's' && szMenuCmd[1] == 'v' && szMenuCmd[2] == '_')
            {
                server_cmd(szMenuCmd);
            }
            else
            {
                client_cmd(id, szMenuCmd);
            }
        }
    }

    return PLUGIN_HANDLED;
}

stock Str_RemoveComment(str[])
{
    new i;
    while(str[i] != EOS)
    {
        if(str[i] == ';')
        {
            str[i] = EOS;
            break;
        }
        i++;
    }
}
Код:
"add_menu_item"    "Кикнуть игрока"        "amx_kickmenu"        "c"
"add_menu_item"    "Забанить забанить"        "amx_banmenu"        "c"
"add_menu_item"    "Ударить/Убить игрока"        "amx_slapmenu"        "c"
"add_menu_item"    "Команда игрока^n"        "amx_teammenu"        "c"
"add_menu_item"    "Смена карты"            "amx_mapmenu"        "c"
"add_menu_item"    "Голосование за карту^n"    "amx_votemapmenu"    "c"
"add_menu_item"    "Голосовые сообщения"        "amx_speechmenu"    "c"
"add_menu_item"    "Серверные команды"        "amx_cmdmenu"        "c"
"add_menu_item"    "Заглушить игрока^n"        "amx_gagmenu"        "с"
"add_menu_item"    "Значения переменных"        "amx_cvarmenu"        "l"
"add_menu_item"    "Настройки статистики^n"    "amx_statscfgmenu"    "l"
"add_menu_item"    "Управление плагинами"        "amx_pausecfgmenu"    "l"
"add_menu_item"    "Запрет оружия"            "amx_restmenu"        "l"
"add_menu_item"    "Обновить Админов"        "amx_reloadadmins"    "l"
 
Сообщения
33
Реакции
1
Помог
1 раз(а)
Я конечно не фокусник, но можно попробовать просто скопировать нужное содержимое и зарегистрировать нужные вам cmd
 
Сообщения
678
Реакции
56
Помог
16 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Статус
В этой теме нельзя размещать новые ответы.

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

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