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

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    Вот такой код
    как правильно сделать?
    PHP:
    1. #include <amxmodx>
    2. #include <amxmisc>
    3. #include <hamsandwich>
    4. #include <cstrike>
    5. #include <fun>
    6. #include <rpg>
    7.  
    8. #pragma tabsize 0
    9.  
    10. new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0
    11.  
    12. #define PLUGIN "Super Menu"
    13. #define VERSION "2.0"
    14. #define AUTHOR "TrbSin"
    15.  
    16. new pAccessFlags;
    17.  
    18. public plugin_init()
    19. {
    20.     pAccessFlags = register_cvar("super_flag", "q");
    21.    
    22.     register_plugin(PLUGIN, VERSION, AUTHOR)
    23.     register_menu("Menu 1", keys, "func_menu")
    24.     register_clcmd("vipmenu", "AdminMenu")
    25.     register_clcmd("transfer", "transfer_lvl", ADMIN_ALL, "")
    26. }
    27.  
    28. public AdminMenu(id)
    29. {
    30.     new sFlags[6]; get_pcvar_string(pAccessFlags, sFlags, charsmax(sFlags));
    31.     if(get_user_flags(id) & read_flags(sFlags))
    32.     {
    33.     static menu[650], Len
    34.     Len = 0
    35.     Len = formatex(menu[Len], charsmax(menu) - Len, "\d[\rRPG\d] \wМеню \rглавного \wадмина^n^n");
    36.    
    37.  
    38.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r1. \wПерезагрузить лвл^n")
    39.     keys |= MENU_KEY_1
    40.  
    41.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r2. \wВыдать лвл^n")
    42.     keys |= MENU_KEY_2
    43.  
    44.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r3. \wЗабрать лвл^n")
    45.     keys |= MENU_KEY_3
    46.    
    47.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r0. \wВыход^n")
    48.     keys |= MENU_KEY_0
    49.    
    50.     show_menu(id, keys, menu, -1, "Menu 1");
    51.     }
    52.     else console_print(id, "У Вас нету доступа к команде.")
    53.     return PLUGIN_HANDLED
    54. }
    55. public func_menu(id, key)
    56. {
    57.     switch(key)
    58.     {
    59.         case 0: RELVLPlayer(id)
    60.         default: LVLPlayer(id)
    61.     }      
    62.     return PLUGIN_HANDLED
    63. }
    64.  
    65. public LVLPlayer(id)
    66. {
    67.         new menu = menu_create( "\wВыбери игрока:", "LvlName" )
    68.         new players[32], pnum, tempid
    69.         new szName[32], szTempid[10]
    70.         get_players(players, pnum)
    71.         for(new i; i<pnum; i++)
    72.         {
    73.             cs_get_user_team(players[i])
    74.             tempid = players[i]
    75.            
    76.             get_user_name(tempid, szName, 31)
    77.             num_to_str(tempid, szTempid, 9)
    78.  
    79.             menu_additem(menu, szName, szTempid, 0)
    80.            
    81.         menu_setprop(menu, MPROP_NEXTNAME, "Дальше")
    82.         menu_setprop(menu, MPROP_BACKNAME, "Назад")
    83.         menu_setprop(menu, MPROP_EXITNAME, "Закрыть")
    84.         }
    85.         menu_display(id, menu, 0)
    86.         return PLUGIN_HANDLED
    87. }
    88.  
    89. public LvlName(id, menu, item)
    90. {
    91.     if(item == MENU_EXIT)
    92.     {
    93.         menu_destroy(menu)
    94.         return PLUGIN_HANDLED
    95.     }
    96.  
    97.     new data[6], iName[64], playername[33], playername2[33]
    98.     new access, callback
    99.     menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
    100.  
    101.     new tempid = str_to_num(data)
    102.     cs_get_user_team(tempid)
    103.    
    104.     get_user_name(id, playername, 32)
    105.     get_user_name(tempid, playername2, 32)
    106.  
    107.    
    108.            
    109.     client_cmd(id, "messagemode ^"transfer %i^"", tempid)
    110.        
    111.     //write_colored(0, "%L", LANG_PLAYER, "VIP_CSPEED", playername, playername2)
    112.      AdminMenu(id)
    113.  
    114.     menu_destroy(menu)
    115.     return PLUGIN_HANDLED
    116. }
    117.  
    118. public RELVLPlayer(id)
    119. {
    120.     new menu = menu_create( "\yВыбери игрока:", "RelvlName" )
    121.     new players[32], pnum, tempid
    122.     new szName[32], szTempid[10]
    123.     cs_get_user_team(id)
    124.  
    125.     get_players(players, pnum)
    126.  
    127.     for(new i; i<pnum; i++)
    128.     {
    129.     cs_get_user_team(players[i])
    130.        
    131.     tempid = players[i]
    132.  
    133.     get_user_name(tempid, szName, 31)
    134.     num_to_str(tempid, szTempid, 9)
    135.  
    136.     menu_additem(menu, szName, szTempid, 0)
    137.     }
    138.     menu_setprop( menu, MPROP_NEXTNAME, "Дальше")
    139.     menu_setprop( menu, MPROP_BACKNAME, "Назад")
    140.     menu_setprop( menu, MPROP_EXITNAME, "Выход")  
    141.     //menu_setprop( menu, MPROP_PERPAGE, 0)
    142.     menu_display(id, menu, 0)
    143.      return PLUGIN_HANDLED
    144. }
    145.  
    146. public RelvlName(id, menu, item)
    147. {
    148.    
    149.     {
    150.     if(item == MENU_EXIT)
    151.     {
    152.         menu_destroy(menu)
    153.         return PLUGIN_HANDLED
    154.     }
    155.  
    156.     new data[6], iName[64], playername2[33]//, playername[33]
    157.     new access, callback
    158.     menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
    159.  
    160.     new tempid = str_to_num(data)
    161.     cs_get_user_team(tempid)
    162.    
    163.     //get_user_name(id, playername, 32)
    164.     get_user_name(tempid, playername2, 32)
    165.  
    166.             client_cmd(id, "amx_rpg_drop_upgs %s", playername2)
    167.        
    168.     //write_colored(0, "%L", LANG_PLAYER, "VIP_CGRAV", playername, playername2)
    169.           AdminMenu(id)
    170.     }
    171.  
    172.  
    173.     menu_destroy(menu)
    174.     return PLUGIN_HANDLED
    175. }
    176.  
    177.  
    178. public transfer_lvl(id, key)
    179. {
    180.     new param[9]
    181.     read_argv(2, param, charsmax(param))
    182.    
    183.     for (new x; x < strlen(param); x++)
    184.     {
    185.         if(!isdigit(param[x]))
    186.         {
    187.             ChatColor(id, "%L", LANG_PLAYER, "TRANSFER_PARMCHISLO")
    188.             return PLUGIN_HANDLED
    189.         }
    190.     }
    191.    
    192.     new amount = str_to_num(param)
    193.  
    194.         if (!amount )
    195.         {
    196.                 ChatColor(id, "%L", LANG_PLAYER, "TRANSFER_BOLNYL")
    197.                 return PLUGIN_HANDLED
    198.         }
    199.  
    200.     if(!is_user_connected(id))
    201.         return PLUGIN_CONTINUE
    202.    
    203.    
    204.     read_argv(1, param, charsmax(param))
    205.     new player = str_to_num(param)
    206.  
    207.     if(!is_user_connected(player))
    208.         return PLUGIN_CONTINUE
    209.  
    210.     new names[32]
    211.    
    212.     get_user_name(player, names, 31)
    213.     if(keys |= MENU_KEY_2)
    214.     client_cmd(id, "amx_rpg_lvl %s + %d", names, amount)
    215.     else if(keys |= MENU_KEY_3)
    216.     client_cmd(id, "amx_rpg_lvl %s - %d", names, amount)
    217.     else if(keys |= MENU_KEY_4)
    218.     client_cmd(id, "amx_rpg_lvl %s = %d", names, amount)
    219.  
    220.     return PLUGIN_HANDLED
    221. }
    222.  
    223. stock ChatColor(const id, const input[], any:...)
    224. {
    225.     new count = 1, players[32]
    226.     static msg[191]
    227.     vformat(msg, 190, input, 3)
    228.    
    229.     replace_all(msg, 190, "!g", "^4")
    230.     replace_all(msg, 190, "!y", "^1")
    231.     replace_all(msg, 190, "!t", "^3")
    232.    
    233.     if (id) players[0] = id; else get_players(players, count, "ch")
    234.     {
    235.             for (new i = 0; i < count; i++)
    236.             {
    237.             if (is_user_connected(players[i]))
    238.             {
    239.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
    240.                         write_byte(players[i]);
    241.                         write_string(msg);
    242.                         message_end();
    243.             }
    244.             }
    245.     }
    246. }
     
  2. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    628
    Симпатии:
    232
    Пол:
    Мужской
    Ну так создавай тут условие:
    PHP:
    1.  
    2. public func_menu(id, key)
    3. {
    4.      if(key == 0)
    5.      {
    6.          ....
    7.      }
    8.      else
    9.          ....
    10.  
    11.      return PLUGIN_HANDLED
    12. }
     
  3. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    @MakapoH., Ты код вообще смотрел? мне надо чтобы messagemode работал
     
  4. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    628
    Симпатии:
    232
    Пол:
    Мужской
    @boss_ex, Ты вообще писал что тебе конкретно нужно? Messagemode не будет работать у игроков с протектором.
     
  5. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    @MakapoH., это меню гл. админа для выдачи уровней в RPG моде, поэтому мне пофигу на остальных игроков =)
     
  6. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    628
    Симпатии:
    232
    Пол:
    Мужской
    Тогда через SVC_DIRECTOR
    message_begin(MSG_ONE, 51, .player = id)
     
  7. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    @MakapoH., ааааааа, ты меня вообще не понимаешь чтоль? посмотри код там transfer_lvl(id) где стоят условия keys |= MENU_KEY_2 и т.д. как правильно сделать? только не говори загадками
     
  8. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    628
    Симпатии:
    232
    Пол:
    Мужской
    Ааа, ну так юзай так:
    PHP:
    1.  
    2. switch(key)
    3. {
    4.     case MENU_KEY_2: ...
    5.     case MENU_KEY_3: ...
    6.     ....
    7. }
    8.  
    Либо если не работает, то замени switch(key) на switch(key |=)
     
  9. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    843
    Симпатии:
    284
    Пол:
    Мужской
    @boss_ex, Тюю что ты нахимичил? :eek::crazy: Ты сначала опиши функции твоего меню как оно должно работать и что конкретно тебя интересует, а то дурные вопросы рождают дурные ответы! Как минимум у тебя transfer_lvl вызываеться только при написании команды transfer в консоль! Как ты туда хочешь (id, key) меню впхать я вообще не понимаю!
     
  10. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    628
    Симпатии:
    232
    Пол:
    Мужской
  11. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    843
    Симпатии:
    284
    Пол:
    Мужской
    @MakapoH., Ты о чем? Не прост я реально на код взглянул да там черт ногу сломит, просто он херню написал а ты в место того чтобы на ошибки указать пытаешься помочь, там же код не рабочий 100%, transfer_lvl key ну никак не известна поэтому и условия ложные. Чет вы химичите лан не буду вам мешать.
     
  12. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    843
    Симпатии:
    284
    Пол:
    Мужской
    Там реально для каждого пункта надо
    PHP:
    1.  Len += formatex(menu[Len], charsmax(menu) - Len, "\r1. \wПерезагрузить лвл^n")
    2.     keys |= MENU_KEY_1
    3.  
    4.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r2. \wВыдать лвл^n")
    5.     keys |= MENU_KEY_2
    6.  
    7.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r3. \wЗабрать лвл^n")
    8.     keys |= MENU_KEY_3
    Надо отдельно получать список игроков и потом тогда делать уже свои функции, кода будет больше за то работать верно будет, еще можно и сделать меньше кода одним списком, но надо засесть и хорошо подумать как лучше это сделать но все же то что ТС скинул полный бред!
     
  13. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    843
    Симпатии:
    284
    Пол:
    Мужской
    @boss_ex, псс парень, лови думаю дальше разберешься.
    PHP:
    1. #include <amxmodx>
    2. #include <amxmisc>
    3. #include <cstrike>
    4.  
    5. #define PLUGIN "Super Menu"
    6. #define VERSION "0.1"
    7. #define AUTHOR "Author"
    8.  
    9. new const keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_0;
    10. new pAccessFlags, g_iFlags;
    11.  
    12. public plugin_init() {
    13.     register_plugin(PLUGIN, VERSION, AUTHOR);
    14.     pAccessFlags = register_cvar("super_flag", "t");
    15.  
    16.     register_menu("Menu 1", keys, "func_menu");
    17.     register_clcmd("vipmenu", "AdminMenu");
    18. }
    19.  
    20. public plugin_cfg() {
    21.     new sAccess[4]; get_pcvar_string(pAccessFlags, sAccess, charsmax(sAccess));
    22.     g_iFlags = read_flags(sAccess);
    23. }
    24.  
    25. public AdminMenu(id) {
    26.     if(~get_user_flags(id) & g_iFlags) return console_print(id, "У Вас нету доступа к команде.");
    27.  
    28.     static menu[512], Len;
    29.     Len = 0;
    30.     Len += formatex(menu[Len], charsmax(menu) - Len, "\d[\rRPG\d] \wМеню \rглавного \wадмина^n^n");
    31.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r1. \wПерезагрузить лвл^n");
    32.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r2. \wВыдать лвл^n");
    33.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r3. \wЗабрать лвл^n");
    34.     Len += formatex(menu[Len], charsmax(menu) - Len, "\r0. \wВыход^n");
    35.  
    36.     return show_menu(id, keys, menu, -1, "Menu 1");
    37. }
    38.  
    39. public func_menu(id, key) {
    40.     new menu;
    41.     switch(key) {
    42.         case 0: menu = menu_create("\yВыбери игрока:", "RelvlName");
    43.         case 1: menu = menu_create("\wВыбери игрока:", "UpLvlName");
    44.         case 2: menu = menu_create("\wВыбери игрока:", "DownLvlName");
    45.     }
    46.     new players[32], pnum, tempid;
    47.     new szName[32], szTempid[10];
    48.  
    49.     get_players(players, pnum);
    50.     for(new i; i < pnum; i++) {
    51.         cs_get_user_team(players[i]);
    52.         tempid = players[i];
    53.  
    54.         get_user_name(tempid, szName, 31);
    55.         num_to_str(tempid, szTempid, 9);
    56.  
    57.         menu_additem(menu, szName, szTempid, 0);
    58.  
    59.         menu_setprop(menu, MPROP_NEXTNAME, "Дальше");
    60.         menu_setprop(menu, MPROP_BACKNAME, "Назад");
    61.         menu_setprop(menu, MPROP_EXITNAME, "Закрыть");
    62.     }
    63.  
    64.     menu_display(id, menu, 0);
    65.     return PLUGIN_HANDLED;
    66. }
    67.  
    68. public RelvlName(id, menu, item) {
    69.     //your code
    70. }
    71.  
    72. public UpLvlName(id, menu, item) {
    73.     //your code
    74. }
    75.  
    76. public DownLvlName(id, menu, item) {
    77.     //your code
    78. }
    79.  
    80. stock ChatColor(const id, const input[], any:...)
    81. {
    82.     new count = 1, players[32]
    83.     static msg[191]
    84.     vformat(msg, 190, input, 3)
    85.  
    86.     replace_all(msg, 190, "!g", "^4")
    87.     replace_all(msg, 190, "!y", "^1")
    88.     replace_all(msg, 190, "!t", "^3")
    89.  
    90.     if (id) players[0] = id; else get_players(players, count, "ch")
    91.     {
    92.             for (new i = 0; i < count; i++)
    93.             {
    94.             if (is_user_connected(players[i]))
    95.             {
    96.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
    97.                         write_byte(players[i]);
    98.                         write_string(msg);
    99.                         message_end();
    100.             }
    101.             }
    102.     }
    103. }
    --- добавлено 19.08.16 ---
    От идеи оригинала старался не отходить, дальше функции для каждого пункта сам думаю запилишь и не надо ничего выдумывать.
     
    boss_ex нравится это.
  14. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    843
    Симпатии:
    284
    Пол:
    Мужской
    Хотя и это
    PHP:
    1. public func_menu(id, key) {
    2.     new menu;
    3.     switch(key) {
    4.         case 0: menu = menu_create("\yВыбери игрока:", "RelvlName");
    5.         case 1: menu = menu_create("\wВыбери игрока:", "UpLvlName");
    6.         case 2: menu = menu_create("\wВыбери игрока:", "DownLvlName");
    7.     }
    8.     new players[32], pnum, tempid;
    9.     new szName[32], szTempid[10];
    10.  
    11.     get_players(players, pnum);
    12.     for(new i; i < pnum; i++) {
    13.         cs_get_user_team(players[i]);
    14.         tempid = players[i];
    15.  
    16.         get_user_name(tempid, szName, 31);
    17.         num_to_str(tempid, szTempid, 9);
    18.  
    19.         menu_additem(menu, szName, szTempid, 0);
    20.  
    21.         menu_setprop(menu, MPROP_NEXTNAME, "Дальше");
    22.         menu_setprop(menu, MPROP_BACKNAME, "Назад");
    23.         menu_setprop(menu, MPROP_EXITNAME, "Закрыть");
    24.     }
    25.  
    26.     menu_display(id, menu, 0);
    27.     return PLUGIN_HANDLED;
    28. }
    можно на это
    PHP:
    1. public func_menu(id, key) {
    2.     new iMenu;
    3.     switch(key) {
    4.         case 0: iMenu = menu_create("\yВыбери игрока:", "RelvlName");
    5.         case 1: iMenu = menu_create("\wВыбери игрока:", "UpLvlName");
    6.         case 2: iMenu = menu_create("\wВыбери игрока:", "DownLvlName");
    7.     }
    8.  
    9.     new s_Name[32], s_Player[10], players[32], pnum;
    10.  
    11.     get_players(players, pnum);
    12.     for (new i; i < pnum; i++) {
    13.         get_user_name(players[i], s_Name, charsmax(s_Name));
    14.         num_to_str(players[i], s_Player, charsmax(s_Player));
    15.    
    16.         menu_additem(iMenu, s_Name, s_Player, 0);
    17.     }
    18.  
    19.     menu_setprop(menu, MPROP_NEXTNAME, "Дальше");
    20.     menu_setprop(menu, MPROP_BACKNAME, "Назад");
    21.     menu_setprop(menu, MPROP_EXITNAME, "Закрыть");
    22.     menu_display(id, iMenu, 0);
    23. }
    --- добавлено 19.08.16 ---
    и #include <cstrike> тогда удалить можно :)
     
    boss_ex и x00peR нравится это.