1. gegelga Пользователь

    Регистрация:
    17.03.15
    Сообщения:
    62
    Симпатии:
    11
    2015-11-16_00004.jpg

    И так, я решил в меню прописать срок админки, у меня получилось но циферки которые показывают на какой странице ты находишся находятся не после названия а после срока админки, как их сделать сразу после названия меню:

    Код:
    #include <amxmodx>
    #include <amxmisc>
    #include <WPMGPrintChatColor>
    
    #define PLUGIN     "MenuGen"
    #define VERSION     "1.0"
    #define AUTHOR     "CrAsH"
    
    /*==========================================
        Информация об структуре менюх
    ===========================================*/
    enum _:EMenu
    {
        EMenuName[64] = 1,
        EMenuCommand[64],
    }
    
    new g_EMenuNum
    new g_EMenu[99][EMenu]
    
    /*==========================================
        Информация об структуре менюх(пунктов)
    ===========================================*/
    enum _:EItem
    {
        EItemName[64] = 1,
        EItemCommand[64],
        EItemFunction[64],
        EItemPlugin[64],
        EItemFlag[64],
    
        EItemMenuID
    }
    
    new g_EItemNum
    new g_EItem[256][EItem]
    
    /*==========================================
                    Всякая хрень
    ===========================================*/
    new g_LoadMenus[81]
    
    new iPlayerMenuID[33]
    
    native al_admin_expired(index);
    
    /*==========================================
                    Инициализация
    ===========================================*/
    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR)
    
        //Отлов вызова менюх
        register_clcmd("say", "CheckShow")
    
        //Ланг файл
        register_dictionary("MenuGen.txt")
    }
    
    /*==========================================
            Загрузка и обработка конфигов
    ===========================================*/
    public plugin_cfg()
    {
        new szError[512]
        new iLine, iGen
    
        new g_LoadDir[81]
        get_configsdir(g_LoadDir, charsmax( g_LoadDir ))
    
        formatex(g_LoadMenus, charsmax( g_LoadMenus ), "%s/MenuGen.ini", g_LoadDir)
        if(!file_exists( g_LoadMenus ))
        {
            formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "MG_CONFIG_NOFILE", g_LoadMenus)
            set_fail_state( szError )
        }
    
        new iFile = fopen(g_LoadMenus, "rt")
        while(!feof( iFile ))
        {
            new szText[200]
            fgets(iFile, szText, charsmax( szText ))
    
            trim( szText )
    
            ++iLine
            if(!strlen( szText ) || szText[0] == ';' || (szText[0] == '/' && szText[1] == '/' ) || iLine == 1)
                continue
    
            if(szText[0] == '[')
            {
                replace_all(szText, charsmax( szText ), "[", "")
                replace_all(szText, charsmax( szText ), "]", "")
    
                new szName[64], szCommand[32]
                strtok(szText, szName, charsmax( szName ), szCommand, charsmax( szCommand ), '#')
    
                ++g_EMenuNum
    
                if(g_EMenuNum >= 98)
                    break
    
                g_EMenu[g_EMenuNum][EMenuName] = szName
                g_EMenu[g_EMenuNum][EMenuCommand] = szCommand
    
                iGen = true
                continue
            }else
            if(szText[0] == ']')
            {
                iGen = false
                continue
            }
    
            if(!iGen)
                continue
    
            new szTextP[6][64]
            parse(szText,
                szTextP[1], 63,
                szTextP[2], 63,
                szTextP[3], 63,
                szTextP[4], 63,
                szTextP[5], 63
            )
    
            ++g_EItemNum
    
            if(g_EItemNum >= 255)
                break
    
            g_EItem[g_EItemNum][EItemName] = szTextP[1]
            g_EItem[g_EItemNum][EItemCommand] = szTextP[2]
            g_EItem[g_EItemNum][EItemFunction] = szTextP[3]
            g_EItem[g_EItemNum][EItemPlugin] = szTextP[4]
            g_EItem[g_EItemNum][EItemFlag] = szTextP[5]
            g_EItem[g_EItemNum][EItemMenuID] = g_EMenuNum
        }
        fclose( iFile )
    }
    
    /*==========================================
                Обработка вывода
    ===========================================*/
    public CheckShow(id)
    {
        new szMessage[192]
    
        read_args(szMessage, charsmax( szMessage ))
        remove_quotes( szMessage )
    
        for(new i = 1; i <= g_EMenuNum; i++)
        {
            if(equal(szMessage, g_EMenu[i][EMenuCommand]))
            {
                new szText[512]
                new exp = al_admin_expired(id);
                if(exp > 0)
                {
                    new sys = get_systime();
                    if(exp - sys > 0)
                        {
                            if((exp - sys) / 86400 > 4)
                            formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wзакончится через: \r%d \yдней!^n^n", (exp - sys) / 86400, g_EMenu[i][EMenuName])
                            else if (4 >= (exp - sys) / 86400 > 0)
                            formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wзакончится через: \r%d \yдня!^n^n", (exp - sys) / 86400, g_EMenu[i][EMenuName])
                            else
                            formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wзакончится: \rсегодня!^n^n", g_EMenu[i][EMenuName])
                        }
                        else
                        client_print(id, print_chat, "Действие админки истекло!");
                }
                else if(exp == 0) formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wУ вас \yбессрочная^n^n", g_EMenu[i][EMenuName])
                else formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n^n", g_EMenu[i][EMenuName])
                new iMenu = menu_create(szText, "GenMenu_handler" )
    
                for(new k = 1; k <= g_EItemNum; k++)
                {
                    if(g_EItem[k][EItemMenuID] == i)
                    {
                        new iStr[10]
                        num_to_str(k, iStr, charsmax(iStr ))
    
                        if(GetMenuFlag(id, g_EItem[k][EItemFlag]))
                        {
                            menu_additem(iMenu, g_EItem[k][EItemName], iStr, 0)
                        }else{
                            menu_additem(iMenu, g_EItem[k][EItemName], iStr, ADMIN_ADMIN)
                        }
                    }
                }
                menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL )
    
                formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "MG_MENU_NEXT")
                menu_setprop(iMenu, MPROP_NEXTNAME, szText)
      
                formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "MG_MENU_BACK")
                menu_setprop(iMenu, MPROP_BACKNAME,szText)
      
                formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "MG_MENU_EXIT")
                menu_setprop(iMenu, MPROP_EXITNAME, szText)
          
                menu_display(id, iMenu, 0)
    
                iPlayerMenuID[id] = i
                return PLUGIN_HANDLED
            }
        }
        return PLUGIN_CONTINUE
    }
    
    /*==========================================
                Обработка нажатия
    ===========================================*/
    public GenMenu_handler(id, iMenu, iItem)
    {
        if(iItem == MENU_EXIT)
        {
            menu_destroy( iMenu )
            return PLUGIN_HANDLED
        }
    
        new szData[6], szName[64], iAccess,iCallback
        menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback)
    
        new iKey = str_to_num( szData )
    
        for(new i = 1; i <= g_EMenuNum; i++)
        {
            if(i == iPlayerMenuID[id])
            {
                for(new k = 1; k <= g_EItemNum; k++)
                {
                    if(k != iKey)
                        continue
    
                    if(strlen( g_EItem[k][EItemCommand] ))
                    {
                        client_cmd(id, "%s", g_EItem[k][EItemCommand])
                        return PLUGIN_HANDLED
                    }else{
                        if(strlen( g_EItem[k][EItemFunction] ))
                        {
                            new iRes = callfunc_begin(g_EItem[k][EItemFunction], g_EItem[k][EItemPlugin])
    
                            switch( iRes )
                            {
                                case 1:
                                {
                                    callfunc_push_int(id)
                                    callfunc_end()
                                }
    
                                case 0:
                                {
                                    PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_TIMEOUT", g_EItem[k][EItemFunction], g_EItem[k][EItemPlugin])
                                }
    
                                case -1:
                                {
                                    PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_NOPLUGIN", g_EItem[k][EItemPlugin])
                                }
    
                                case -2:
                                {
                                    PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_NOFUNCTION", g_EItem[k][EItemFunction], g_EItem[k][EItemPlugin])
                                }
                            }
    
                            return PLUGIN_HANDLED
                        }else{
                            PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_NOACTION")
                            return PLUGIN_HANDLED
                        }
                    }
                }
            }
        }
    
        menu_destroy( iMenu )
        return PLUGIN_HANDLED
    }
    
    /*==========================================
            Проверка доступности пункта
    ===========================================*/
    stock GetMenuFlag(id, szFlag[])
    {
        if(!strlen( szFlag ))
            return true
    
        new szFlags[32]
        get_flags(get_user_flags(id), szFlags, charsmax( szFlags ))
    
        if(containi(szFlags, szFlag) != -1)
            return true
    
        return false
    }
     
    Последнее редактирование: 16.11.15
  2. gegelga Пользователь

    Регистрация:
    17.03.15
    Сообщения:
    62
    Симпатии:
    11
    Ну что, идей нет=?
     
  3. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.086
    Симпатии:
    368
    Пол:
    Мужской
    Telegram:
    LeninChan
    gegelga, Как вариант сделать вывод срока строку меню или использовать новое меню amxx
     
  4. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    gegelga,
    ^n^n удали
     
  5. gegelga Пользователь

    Регистрация:
    17.03.15
    Сообщения:
    62
    Симпатии:
    11
    спасибо. Готовый вариант мемюшек с конфигами, для тех кому интересно.

    Код:
    #include <amxmodx>
    #include <amxmisc>
    #include <WPMGPrintChatColor>
    
    #define PLUGIN     "MenuGen"
    #define VERSION     "1.0"
    #define AUTHOR     "CrAsH"
    
    /*==========================================
        Информация об структуре менюх
    ===========================================*/
    enum _:EMenu
    {
        EMenuName[64] = 1,
        EMenuCommand[64],
    }
    
    new g_EMenuNum
    new g_EMenu[99][EMenu]
    
    /*==========================================
        Информация об структуре менюх(пунктов)
    ===========================================*/
    enum _:EItem
    {
        EItemName[64] = 1,
        EItemCommand[64],
        EItemFunction[64],
        EItemPlugin[64],
        EItemFlag[64],
    
        EItemMenuID
    }
    
    new g_EItemNum
    new g_EItem[256][EItem]
    
    /*==========================================
                    Всякая хрень
    ===========================================*/
    new g_LoadMenus[81]
    
    new iPlayerMenuID[33]
    
    native al_admin_expired(index);
    
    /*==========================================
                    Инициализация
    ===========================================*/
    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR)
    
        //Отлов вызова менюх
        register_clcmd("say", "CheckShow")
    
        //Ланг файл
        register_dictionary("MenuGen.txt")
    }
    
    /*==========================================
            Загрузка и обработка конфигов
    ===========================================*/
    public plugin_cfg()
    {
        new szError[512]
        new iLine, iGen
    
        new g_LoadDir[81]
        get_configsdir(g_LoadDir, charsmax( g_LoadDir ))
    
        formatex(g_LoadMenus, charsmax( g_LoadMenus ), "%s/MenuGen.ini", g_LoadDir)
        if(!file_exists( g_LoadMenus ))
        {
            formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "MG_CONFIG_NOFILE", g_LoadMenus)
            set_fail_state( szError )
        }
    
        new iFile = fopen(g_LoadMenus, "rt")
        while(!feof( iFile ))
        {
            new szText[200]
            fgets(iFile, szText, charsmax( szText ))
    
            trim( szText )
    
            ++iLine
            if(!strlen( szText ) || szText[0] == ';' || (szText[0] == '/' && szText[1] == '/' ) || iLine == 1)
                continue
    
            if(szText[0] == '[')
            {
                replace_all(szText, charsmax( szText ), "[", "")
                replace_all(szText, charsmax( szText ), "]", "")
    
                new szName[64], szCommand[32]
                strtok(szText, szName, charsmax( szName ), szCommand, charsmax( szCommand ), '#')
    
                ++g_EMenuNum
    
                if(g_EMenuNum >= 98)
                    break
    
                g_EMenu[g_EMenuNum][EMenuName] = szName
                g_EMenu[g_EMenuNum][EMenuCommand] = szCommand
    
                iGen = true
                continue
            }else
            if(szText[0] == ']')
            {
                iGen = false
                continue
            }
    
            if(!iGen)
                continue
    
            new szTextP[6][64]
            parse(szText,
                szTextP[1], 63,
                szTextP[2], 63,
                szTextP[3], 63,
                szTextP[4], 63,
                szTextP[5], 63
            )
    
            ++g_EItemNum
    
            if(g_EItemNum >= 255)
                break
    
            g_EItem[g_EItemNum][EItemName] = szTextP[1]
            g_EItem[g_EItemNum][EItemCommand] = szTextP[2]
            g_EItem[g_EItemNum][EItemFunction] = szTextP[3]
            g_EItem[g_EItemNum][EItemPlugin] = szTextP[4]
            g_EItem[g_EItemNum][EItemFlag] = szTextP[5]
            g_EItem[g_EItemNum][EItemMenuID] = g_EMenuNum
        }
        fclose( iFile )
    }
    
    /*==========================================
                Обработка вывода
    ===========================================*/
    public CheckShow(id)
    {
        new szMessage[192]
    
        read_args(szMessage, charsmax( szMessage ))
        remove_quotes( szMessage )
    
        for(new i = 1; i <= g_EMenuNum; i++)
        {
            if(equal(szMessage, g_EMenu[i][EMenuCommand]))
            {
                new szText[512]
                new exp = al_admin_expired(id);
                if(exp > 0)
                {
                    new sys = get_systime();
                    if(exp - sys > 0)
                        {
                            if((exp - sys) / 86400 > 4)
                            formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wзакончится через: \r%d \yдн.!", g_EMenu[i][EMenuName], (exp - sys) / 86400)
                            else if (4 >= (exp - sys) / 86400 > 0)
                            formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wзакончится через: \r%d \yдня!", g_EMenu[i][EMenuName], (exp - sys) / 86400)
                            else
                            formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wзакончится: \rсегодня!", g_EMenu[i][EMenuName])
                        }
                        else
                        client_print(id, print_chat, "Действие админки истекло!");
                }
                else if(exp == 0) formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s^n\r=================== ^n\r[\yАдминка\r] \wУ вас \yбессрочная", g_EMenu[i][EMenuName])
                else formatex(szText, charsmax( szText ), "\r[\yРусский стандарт\r] \w%s", g_EMenu[i][EMenuName])
                new iMenu = menu_create(szText, "GenMenu_handler" )
    
                for(new k = 1; k <= g_EItemNum; k++)
                {
                    if(g_EItem[k][EItemMenuID] == i)
                    {
                        new iStr[10]
                        num_to_str(k, iStr, charsmax(iStr ))
    
                        if(GetMenuFlag(id, g_EItem[k][EItemFlag]))
                        {
                            menu_additem(iMenu, g_EItem[k][EItemName], iStr, 0)
                        }else{
                            menu_additem(iMenu, g_EItem[k][EItemName], iStr, ADMIN_ADMIN)
                        }
                    }
                }
                menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL )
    
                formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "MG_MENU_NEXT")
                menu_setprop(iMenu, MPROP_NEXTNAME, szText)
     
                formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "MG_MENU_BACK")
                menu_setprop(iMenu, MPROP_BACKNAME,szText)
     
                formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "MG_MENU_EXIT")
                menu_setprop(iMenu, MPROP_EXITNAME, szText)
         
                menu_display(id, iMenu, 0)
    
                iPlayerMenuID[id] = i
                return PLUGIN_HANDLED
            }
        }
        return PLUGIN_CONTINUE
    }
    
    /*==========================================
                Обработка нажатия
    ===========================================*/
    public GenMenu_handler(id, iMenu, iItem)
    {
        if(iItem == MENU_EXIT)
        {
            menu_destroy( iMenu )
            return PLUGIN_HANDLED
        }
    
        new szData[6], szName[64], iAccess,iCallback
        menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback)
    
        new iKey = str_to_num( szData )
    
        for(new i = 1; i <= g_EMenuNum; i++)
        {
            if(i == iPlayerMenuID[id])
            {
                for(new k = 1; k <= g_EItemNum; k++)
                {
                    if(k != iKey)
                        continue
    
                    if(strlen( g_EItem[k][EItemCommand] ))
                    {
                        client_cmd(id, "%s", g_EItem[k][EItemCommand])
                        return PLUGIN_HANDLED
                    }else{
                        if(strlen( g_EItem[k][EItemFunction] ))
                        {
                            new iRes = callfunc_begin(g_EItem[k][EItemFunction], g_EItem[k][EItemPlugin])
    
                            switch( iRes )
                            {
                                case 1:
                                {
                                    callfunc_push_int(id)
                                    callfunc_end()
                                }
    
                                case 0:
                                {
                                    PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_TIMEOUT", g_EItem[k][EItemFunction], g_EItem[k][EItemPlugin])
                                }
    
                                case -1:
                                {
                                    PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_NOPLUGIN", g_EItem[k][EItemPlugin])
                                }
    
                                case -2:
                                {
                                    PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_NOFUNCTION", g_EItem[k][EItemFunction], g_EItem[k][EItemPlugin])
                                }
                            }
    
                            return PLUGIN_HANDLED
                        }else{
                            PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "MG_FUNCTION_NOACTION")
                            return PLUGIN_HANDLED
                        }
                    }
                }
            }
        }
    
        menu_destroy( iMenu )
        return PLUGIN_HANDLED
    }
    
    /*==========================================
            Проверка доступности пункта
    ===========================================*/
    stock GetMenuFlag(id, szFlag[])
    {
        if(!strlen( szFlag ))
            return true
    
        new szFlags[32]
        get_flags(get_user_flags(id), szFlags, charsmax( szFlags ))
    
        if(containi(szFlags, szFlag) != -1)
            return true
    
        return false
    }