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

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    PHP:
    1. #include <amxmodx>
    2. #include <amxmisc>
    3. native days_left_info(id);
    4. #pragma semicolon 1
    5.  
    6. #define MAX_PLAYERS 32 // Максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)
    7.  
    8. enum _:DATA_SIZE
    9. {
    10.     DS_Name[48],
    11.     DS_Command[32],
    12.     DS_Acceess
    13. }
    14.  
    15. new Array:g_aData;
    16.  
    17. new g_iPosition[MAX_PLAYERS + 1], g_iItemsNum, g_iItemsPerPage;
    18.  
    19. public plugin_init()
    20. {
    21.     register_plugin("Admin Menu", "0.0.2 alpha", "Subb98 & Nesquik");
    22.     register_clcmd("admin_menu", "CmdAdminMenu", ADMIN_MENU, "- displays Admin Menu");
    23.     register_clcmd("amxmodmenu", "CmdAdminMenu", ADMIN_MENU, "- displays Admin Menu");
    24.     register_menu("_admin_menu", 1023, "HandleMenu");
    25.     new szFile[64];
    26.     get_configsdir(szFile, charsmax(szFile));
    27.     add(szFile, charsmax(szFile), "/admin_menu.ini");
    28.  
    29.     register_dictionary("admin_menu.txt");
    30.     if(file_exists(szFile))
    31.     {
    32.         g_aData = ArrayCreate(DATA_SIZE);
    33.         ReadFile(szFile);
    34.     }
    35.     else
    36.     {
    37.         new szError[96];
    38.         formatex(szError, charsmax(szError), "File ^"%s^" not found", szFile);
    39.         set_fail_state(szError);
    40.     }
    41. }
    42.  
    43. public CmdAdminMenu(const id, const level, const cid)
    44. {
    45.     if(!cmd_access(id, level, cid, 1))
    46.     {
    47.         return PLUGIN_HANDLED;
    48.     }
    49.     return ShowMenu(id, g_iPosition[id] = 0);
    50. }
    51.  
    52. ReadFile(const szFile[])
    53. {
    54.     new pFile = fopen(szFile, "rt"), szBuffer[128], aData[DATA_SIZE], szAccess[24];
    55.     while(!feof(pFile))
    56.     {
    57.         szBuffer[0] = '^0';
    58.         fgets(pFile, szBuffer, charsmax(szBuffer));
    59.         if(szBuffer[0] && szBuffer[0] != ';' && szBuffer[0] != '#')
    60.         {
    61.             aData[DS_Name][0] = '^0', aData[DS_Command][0] = '^0', szAccess[0] = '^0';
    62.             parse(szBuffer, aData[DS_Name], charsmax(aData[DS_Name]), aData[DS_Command], charsmax(aData[DS_Command]), szAccess, charsmax(szAccess));
    63.             if(aData[DS_Name][0] && aData[DS_Command][0] && szAccess[0])
    64.             {
    65.                 aData[DS_Acceess] = read_flags(szAccess);
    66.                 GetLangTransKey(aData[DS_Name]) != TransKey_Bad ? ArrayPushArray(g_aData, aData):server_print("[MenuFront] Invalid multilang load: %s, please fix it", aData[DS_Name]);
    67.             }
    68.         }
    69.     }
    70.     fclose(pFile);
    71.     g_iItemsNum = ArraySize(g_aData);
    72.     if(g_iItemsNum)
    73.     {
    74.         g_iItemsPerPage = g_iItemsNum > 9 ? 8 : 9;
    75.     }
    76.     else
    77.     {
    78.         ArrayDestroy(g_aData);
    79.         new szError[96];
    80.         formatex(szError, charsmax(szError), "File ^"%s^" is empty or incorrect", szFile);
    81.         set_fail_state(szError);
    82.     }
    83. }
    84.  
    85. ShowMenu(const id, iPos)
    86. {
    87.     if(iPos < 0)
    88.     {
    89.         return PLUGIN_HANDLED;
    90.     }
    91.     new iStart, iEnd, iPagesNum, iLen, szMenu[512], aData[DATA_SIZE], iFlags = get_user_flags(id), iKeys = MENU_KEY_0, b;
    92.     iStart = iPos * g_iItemsPerPage;
    93.     if(iStart >= g_iItemsNum)
    94.     {
    95.         iStart = iPos = g_iPosition[id] = 0;
    96.     }
    97.     iEnd = iStart + g_iItemsPerPage;
    98.     if(iEnd > g_iItemsNum)
    99.     {
    100.         iEnd = g_iItemsNum;
    101.     }
    102.     iPagesNum = g_iItemsNum / g_iItemsPerPage + (g_iItemsNum % g_iItemsPerPage ? 1 : 0);
    103.     new exp = days_left_info(id)
    104.     new left[32]
    105.     if (exp == 0)
    106.     {
    107.     format(left, 31, "Не ограничен")  
    108.     }
    109.     else
    110.     {
    111.         num_to_str(exp, left, 19)
    112.     }
    113.     if(iPagesNum == 1)
    114.     {
    115.         iLen = formatex(szMenu, charsmax(szMenu), "%s^n", id, "ADMIN_MENU_TITLE", s_Exp);
    116.     }
    117.     else
    118.     {
    119.         iLen = formatex(szMenu, charsmax(szMenu), "%s^n", id, "ADMIN_MENU_TITLE_PAGE", iPos + 1, iPagesNum, s_Exp);
    120.     }
    121.     for(new a = iStart; a < iEnd; a++)
    122.     {
    123.         ArrayGetArray(g_aData, a, aData);
    124.         if(iFlags & aData[DS_Acceess])
    125.         {
    126.             iKeys |= (1<<b);
    127.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%d. \w%L^n", ++b, id, aData[DS_Name]);
    128.         }
    129.         else
    130.         {
    131.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d%d. %L^n", ++b, id, aData[DS_Name]);
    132.         }
    133.     }
    134.     if(iEnd < g_iItemsNum)
    135.     {
    136.         iKeys |= MENU_KEY_9;
    137.         formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y9. \w%L^n\y0. \w%L", id, "MENU_NEXT", id, iPos ? "MENU_BACK" : "MENU_EXIT");
    138.     }
    139.     else
    140.     {
    141.         formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0. \w%L", id, iPos ? "MENU_BACK" : "MENU_EXIT");
    142.     }
    143.     return show_menu(id, iKeys, szMenu, -1, "_admin_menu");
    144. }
    145.  
    146. public HandleMenu(const id, const iKey)
    147. {
    148.     switch(iKey)
    149.     {
    150.         case 8:
    151.         {
    152.             if(g_iItemsNum > 9)
    153.             {
    154.                 ShowMenu(id, ++g_iPosition[id]);
    155.             }
    156.             else
    157.             {
    158.                 ExecCmd(id, 8);
    159.             }
    160.         }
    161.         case 9:
    162.         {
    163.             ShowMenu(id, --g_iPosition[id]);
    164.         }
    165.         default:
    166.         {
    167.             ExecCmd(id, iKey);
    168.         }
    169.     }
    170. }
    171.  
    172. ExecCmd(const id, const iKey)
    173. {
    174.     new aData[DATA_SIZE];
    175.     ArrayGetArray(g_aData, g_iPosition[id] * g_iItemsPerPage + iKey, aData);
    176.     client_cmd(id, aData[DS_Command]);
    177. }
    Для успешной компиляции сторонних плагинов с использованием натива, необходимо добавить строку native days_left_info(id); в инклюд (например, в amxmodx.inc)
    Добавлена строчка, но не компилирует( Помогите поправить)
     

    Вложения:

    • admin_menu.sma
      Размер файла:
      4,4 КБ
      Просмотров:
      6
    • amxbans_core.sma
      Размер файла:
      30,7 КБ
      Просмотров:
      4
  2. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    PHP:
    1.  
    2. #include <amxmodx>
    3. #include <amxmisc>
    4. //native days_left_info(id);
    5. #pragma semicolon 1
    6.  
    7. #define MAX_PLAYERS 32 // Максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)
    8.  
    9. enum _:DATA_SIZE
    10. {
    11.     DS_Name[48],
    12.     DS_Command[32],
    13.     DS_Acceess
    14. }
    15.  
    16. new Array:g_aData;
    17.  
    18. new g_iPosition[MAX_PLAYERS + 1], g_iItemsNum, g_iItemsPerPage;
    19.  
    20. public plugin_init()
    21. {
    22.     register_plugin("Admin Menu", "0.0.2 alpha", "Subb98 & Nesquik");
    23.     register_clcmd("admin_menu", "CmdAdminMenu", ADMIN_MENU, "- displays Admin Menu");
    24.     register_clcmd("amxmodmenu", "CmdAdminMenu", ADMIN_MENU, "- displays Admin Menu");
    25.     register_menu("_admin_menu", 1023, "HandleMenu");
    26.     new szFile[64];
    27.     get_configsdir(szFile, charsmax(szFile));
    28.     add(szFile, charsmax(szFile), "/admin_menu.ini");
    29.  
    30.     register_dictionary("admin_menu.txt");
    31.     if(file_exists(szFile))
    32.     {
    33.         g_aData = ArrayCreate(DATA_SIZE);
    34.         ReadFile(szFile);
    35.     }
    36.     else
    37.     {
    38.         new szError[96];
    39.         formatex(szError, charsmax(szError), "File ^"%s^" not found", szFile);
    40.         set_fail_state(szError);
    41.     }
    42. }
    43.  
    44. public CmdAdminMenu(const id, const level, const cid)
    45. {
    46.     if(!cmd_access(id, level, cid, 1))
    47.     {
    48.         return PLUGIN_HANDLED;
    49.     }
    50.     return ShowMenu(id, g_iPosition[id] = 0);
    51. }
    52.  
    53. ReadFile(const szFile[])
    54. {
    55.     new pFile = fopen(szFile, "rt"), szBuffer[128], aData[DATA_SIZE], szAccess[24];
    56.     while(!feof(pFile))
    57.     {
    58.         szBuffer[0] = '^0';
    59.         fgets(pFile, szBuffer, charsmax(szBuffer));
    60.         if(szBuffer[0] && szBuffer[0] != ';' && szBuffer[0] != '#')
    61.         {
    62.             aData[DS_Name][0] = '^0', aData[DS_Command][0] = '^0', szAccess[0] = '^0';
    63.             parse(szBuffer, aData[DS_Name], charsmax(aData[DS_Name]), aData[DS_Command], charsmax(aData[DS_Command]), szAccess, charsmax(szAccess));
    64.             if(aData[DS_Name][0] && aData[DS_Command][0] && szAccess[0])
    65.             {
    66.                 aData[DS_Acceess] = read_flags(szAccess);
    67.                 GetLangTransKey(aData[DS_Name]) != TransKey_Bad ? ArrayPushArray(g_aData, aData):server_print("[MenuFront] Invalid multilang load: %s, please fix it", aData[DS_Name]);
    68.             }
    69.         }
    70.     }
    71.     fclose(pFile);
    72.     g_iItemsNum = ArraySize(g_aData);
    73.     if(g_iItemsNum)
    74.     {
    75.         g_iItemsPerPage = g_iItemsNum > 9 ? 8 : 9;
    76.     }
    77.     else
    78.     {
    79.         ArrayDestroy(g_aData);
    80.         new szError[96];
    81.         formatex(szError, charsmax(szError), "File ^"%s^" is empty or incorrect", szFile);
    82.         set_fail_state(szError);
    83.     }
    84. }
    85.  
    86. ShowMenu(const id, iPos)
    87. {
    88.     if(iPos < 0)
    89.     {
    90.         return PLUGIN_HANDLED;
    91.     }
    92.     new iStart, iEnd, iPagesNum, iLen, szMenu[512], aData[DATA_SIZE], iFlags = get_user_flags(id), iKeys = MENU_KEY_0, b;
    93.     iStart = iPos * g_iItemsPerPage;
    94.     if(iStart >= g_iItemsNum)
    95.     {
    96.         iStart = iPos = g_iPosition[id] = 0;
    97.     }
    98.     iEnd = iStart + g_iItemsPerPage;
    99.     if(iEnd > g_iItemsNum)
    100.     {
    101.         iEnd = g_iItemsNum;
    102.     }
    103.     iPagesNum = g_iItemsNum / g_iItemsPerPage + (g_iItemsNum % g_iItemsPerPage ? 1 : 0);
    104.     new exp = days_left_info(id);
    105.     new left[32];
    106.     if (exp == 0)
    107.     {
    108.     format(left, 31, "Не ограничен");  
    109.     }
    110.     else
    111.         num_to_str(exp, left, 19);
    112.     if(iPagesNum == 1)
    113.     {
    114.         iLen = formatex(szMenu, charsmax(szMenu), "%s^n", id, "ADMIN_MENU_TITLE", exp);
    115.     }
    116.     else
    117.     {
    118.         iLen = formatex(szMenu, charsmax(szMenu), "%s^n", id, "ADMIN_MENU_TITLE_PAGE", iPos + 1, iPagesNum, exp);
    119.     }
    120.     for(new a = iStart; a < iEnd; a++)
    121.     {
    122.         ArrayGetArray(g_aData, a, aData);
    123.         if(iFlags & aData[DS_Acceess])
    124.         {
    125.             iKeys |= (1<<b);
    126.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%d. \w%L^n", ++b, id, aData[DS_Name]);
    127.         }
    128.         else
    129.         {
    130.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d%d. %L^n", ++b, id, aData[DS_Name]);
    131.         }
    132.     }
    133.     if(iEnd < g_iItemsNum)
    134.     {
    135.         iKeys |= MENU_KEY_9;
    136.         formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y9. \w%L^n\y0. \w%L", id, "MENU_NEXT", id, iPos ? "MENU_BACK" : "MENU_EXIT");
    137.     }
    138.     else
    139.     {
    140.         formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0. \w%L", id, iPos ? "MENU_BACK" : "MENU_EXIT");
    141.     }
    142.     return show_menu(id, iKeys, szMenu, -1, "_admin_menu");
    143. }
    144.  
    145. public HandleMenu(const id, const iKey)
    146. {
    147.     switch(iKey)
    148.     {
    149.         case 8:
    150.         {
    151.             if(g_iItemsNum > 9)
    152.             {
    153.                 ShowMenu(id, ++g_iPosition[id]);
    154.             }
    155.             else
    156.             {
    157.                 ExecCmd(id, 8);
    158.             }
    159.         }
    160.         case 9:
    161.         {
    162.             ShowMenu(id, --g_iPosition[id]);
    163.         }
    164.         default:
    165.         {
    166.             ExecCmd(id, iKey);
    167.         }
    168.     }
    169. }
    170.  
    171. ExecCmd(const id, const iKey)
    172. {
    173.     new aData[DATA_SIZE];
    174.     ArrayGetArray(g_aData, g_iPosition[id] * g_iItemsPerPage + iKey, aData);
    175.     client_cmd(id, aData[DS_Command]);
    176. }
    177.  
    хех, метод тыка:D
     
  3. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.084
    Симпатии:
    367
    Пол:
    Мужской
    Telegram:
    LeninChan
    Пробуй, если не правильный вывод сделай скриншоты меню
     

    Вложения:

    • admin_menu.amxx
      Размер файла:
      4,1 КБ
      Просмотров:
      3
  4. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    LeninChan^^,
    L 11/04/2015 - 20:10:10: String formatted incorrectly - parameter 6 (total 5)
    L 11/04/2015 - 20:10:10: [AMXX] Run time error 25 (plugin "admin_menu.amxx") - debug not enabled!
    L 11/04/2015 - 20:10:10: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
     
  5. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.084
    Симпатии:
    367
    Пол:
    Мужской
    Telegram:
    LeninChan
    damir4ik, запусти с debug плагин
     
  6. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    LeninChan^^, admin_menu.amxx debug так?
     
  7. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.084
    Симпатии:
    367
    Пол:
    Мужской
    Telegram:
    LeninChan
    да
     
  8. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    LeninChan^^, загрузчик админов походу лаганый. Загружает долго. )минуту ровно грузит при смене карты..)
     
  9. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.572
    Симпатии:
    4.147
    Пол:
    Мужской
    говенненькая менюшка.
    subb может лучше....
     
  10. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    neygomon, меню отличное) но загрузчик админов К-ко ко))
    минуту сервер думает. ) тоесть вообще Ж*па)
     
  11. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.572
    Симпатии:
    4.147
    Пол:
    Мужской
    damir4ik, я про код говорю
     
  12. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    тоесть я прав ?) georgeml , изменил не совсем хорошо amxbans_core ?
    просто у меня , реально сервер в аут уходит))
     
  13. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.572
    Симпатии:
    4.147
    Пол:
    Мужской
    damir4ik, amxbans_core откровенная хурма.
    проще научить admin loader мой кешить коннект для мейна
     
  14. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    он вроде у тебя еще сырой) комменты читал)
    __
    а загружает быстро,вроде) про загрузку все молчат,думаю норм все
     
  15. HannibaL Команда форума

    Регистрация:
    28.02.15
    Сообщения:
    1.057
    Симпатии:
    216
    Пол:
    Мужской
    damir4ik, не сырой, нормально работает. Для криворуких сырой xD
     
  16. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    HannibaL, admin loader?:) насчет него не знаю) поэтому) молчу)