#include <amxmodx>
//;**Информация**
//;Флаги можно поменять на свои:
//;Скин Парня - o
//;Скин Девушки - s
//;Вип Меню - t
//;Вампиризм - n
//;По этим пунктам префиксов плагин опредилит что
//;у пользователя есть нормальная VIP или Админка
//;а не та что даётся на одну карту(я использовал префиксы).
//;Префикс [Админ] - c
//;Префикс [VIP] - r
//;Префикс [Девушка] - s
//;Меню привилегий - q
 
#define PLUGIN   "Giveprivilleges"
#define AUTHOR   "Slove."
#define VERSION   "1.0"
 
#define ACCESSFLAG ADMIN_LEVEL_E
 
new typeImg[33]
new name[32]
new g_Menu;
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("giveprivilleges", "privilleges_menu");
    g_Menu = menu_create("\rМеню\w|\rПривилегий\w*\d 18+^n\rВыберите что дать:\w*^n", "menu_handler2");
    menu_additem(g_Menu, "Дать \w[\rАдминку\w]");
    menu_additem(g_Menu, "Дать \w[\rVIP\w]");
    menu_additem(g_Menu, "Дать \w[\yВампиризм\w]");
    menu_additem(g_Menu, "Дать \w[\rСкин \yПарня\w]");
    menu_additem(g_Menu, "Дать \w[\rСкин \yДевушки\w]^n");
    menu_additem(g_Menu, "Забрать \w[\rПривилегию\w]");
    menu_setprop(g_Menu, MPROP_EXITNAME, "\rВыход");
}
public plugin_end()menu_destroy(g_Menu);
public privilleges_menu(id)
{
    if(~get_user_flags(id) & ACCESSFLAG)return PLUGIN_CONTINUE;
    menu_display(id, g_Menu, 0);
    return PLUGIN_HANDLED;
}
 
public menu_handler2(id,menu,item)
{
    typeImg[id]=item;
    privilleges_menu2(id);
}
 
public privilleges_menu2(id){
    if(!(get_user_flags(id) & ACCESSFLAG)) return PLUGIN_CONTINUE;
    
    new Menu = menu_create("\rСписок\w|\rИгроков:\w*", "menu_handler")
    
    new Player
    new sPlayerName[128]
    new sPlayerId[11]                                         
    
    new playersList[32]
    new playersnum
    get_players(playersList, playersnum, "c")
    
    for(new i; i<playersnum; i++)
    {
        Player = playersList[i]
        get_user_name(Player, sPlayerName, charsmax(sPlayerName))
        num_to_str(Player, sPlayerId, charsmax(sPlayerId))
        menu_additem(Menu, sPlayerName, sPlayerId)
    }
    
    menu_setprop(Menu, MPROP_BACKNAME, "\yНазад")
    menu_setprop(Menu, MPROP_NEXTNAME, "\yВперёд")
    menu_setprop(Menu, MPROP_EXITNAME, "\rВыход")
    menu_display(id, Menu, 0)
    
    return PLUGIN_HANDLED
}
 
public menu_handler(id, menu, item)
{
    if (item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED
    }
    get_user_name(id, name, 31);
    new flags = read_flags("cmnotu"); // флаги админки
    new flagsvip = read_flags("t"); // флаги вип
    new flagsvampir = read_flags("n"); // флаги вампиризма
    new flagsboy = read_flags("o"); // флаги пацана
    new flagsgirl = read_flags("s"); // флаги девушки
    new flagsnone = read_flags("z"); // флаг пользователя
    new s_Data[6], s_Name[64], i_Access, i_Callback;
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback);
    menu_destroy(menu);
    new Player = str_to_num(s_Data);
    
    if(!is_user_connected(Player)){
        print_col_chat(id, "!g[Сервер] !yИгрок вышел с сервера.")
        privilleges_menu(id)                               
        return PLUGIN_HANDLED
    }                                                     
    switch(typeImg[id])
    {
        case 0:
        {
            if(!flags)flags=read_flags("cmnotu");
            if(get_user_flags(Player) & flags)
            {
                print_col_chat(id, "!g[Сервер] !yУ игрока !g%s !yуже есть !tАдминка.", s_Name)
            }
            else
            {
                set_user_flags(Player,flags);
                print_col_chat(0, "!g[Сервер] !yАдминистратор !g%s !yвыдал игроку !g%s !tАдминку !yна карту.", name, s_Name)
                menu_display(id, menu, 0);
            }
        }
        case 1:
        {
            if(!flags)flags=read_flags("t");
            if(get_user_flags(Player) & flags)
            {
                print_col_chat(id, "!g[Сервер] !yУ игрока !g%s !yуже есть !tVIP.", s_Name)
            }
            else
            {
                set_user_flags(Player,flagsvip);
                print_col_chat(0, "!g[Сервер] !yАдминистратор !g%s !yвыдал игроку !g%s !tVIP !yна карту.", name, s_Name)
                menu_display(id, menu, 0);
            }
        }
        case 2:
        {
            if(!flags)flags=read_flags("n");
            if(get_user_flags(Player) & flags)
            {
                print_col_chat(id, "!g[Сервер] !yУ игрока !g%s !yуже есть !tВампиризм.", s_Name)
            }
            else
            {
                set_user_flags(Player,flagsvampir);
                print_col_chat(0, "!g[Сервер] !yАдминистратор !g%s !yвыдал игроку !g%s !tВампиризм !yна карту.", name, s_Name)
                menu_display(id, menu, 0);
            }
        }
        case 3:
        {   
            if(!flags)flags=read_flags("ad");
            if(get_user_flags(Player) & flags)
            {
                print_col_chat(id, "!g[Сервер] !yУ игрока !g%s !yуже есть !tСкин.", s_Name)
            }
            else
            {
                set_user_flags(Player,flagsboy);
                print_col_chat(0, "!g[Сервер] !yАдминистратор !g%s !yвыдал игроку !g%s !tСкин Парня !yна карту.", name, s_Name)
                menu_display(id, menu, 0);
            }
        }
        case 4:
        {
            if(!flags)flags=read_flags("ad");
            if(get_user_flags(Player) & flags)
            {
                print_col_chat(id, "!g[Сервер] !yУ игрока !g%s !yуже есть !tСкин.", s_Name)
            }
            else
            {
                set_user_flags(Player,flagsgirl);
                print_col_chat(0, "!g[Сервер] !yАдминистратор !g%s !yвыдал игроку !g%s !tСкин Девушки !yна карту.", name, s_Name)
                menu_display(id, menu, 0);
            }
        }
        case 5:
        {
            static flags=0;
            if(!flags)flags=read_flags("adqf");
            if(get_user_flags(Player) & flags)
            {
                print_col_chat(id, "!g[Сервер] !yНельзя забрать у !g%s !yпривилегию.", s_Name)
            }
            else
            {
                remove_user_flags(Player,  read_flags("cmnrtous"));
                set_user_flags(Player,flagsnone);
                print_col_chat(0, "!g[Сервер] !yАдминистратор !g%s !yзабрал у !g%s !yпривилегию.", name, s_Name)
                menu_display(id, menu, 0);
            }
        }
   }
                                                            
   return PLUGIN_CONTINUE
}
 
stock print_col_chat(const id, const input[], any:...)
{
   new count = 1, players[32]
   static msg[191]
   vformat(msg, 190, input, 3)                                                               
   replace_all(msg, 190, "!g", "^4") // Green Color
   replace_all(msg, 190, "!y", "^1") // Default Color
   replace_all(msg, 190, "!t", "^3") // Team Color
    
   if (id)
      players[0] = id
   else
      get_players(players, count, "ch")
    
   {
      for ( new i = 0; i < count; i++ )
      {
         if (is_user_connected(players[i]))
         {
            message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
            write_byte(players[i])
            write_string(msg)
            message_end()
         }
      }
   }
}