ReHLDS/HLDS GivePrivilleges "выдача онлайн привилегий на карту"

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#1
О плагине:
Название: GivePrivilleges
Автор:
Slove.
Версия: 1.2
Описание:
Плагин для выдачи привилегий на одну карту.
Отлично подойдет для выдачи привилегии на ТЕСТ перед покупкой.
Что было реализовано:
  • Добавлен пункт: Забрать Привилегию.
  • Проверка на то есть ли у человека привилегия(чтобы повторно не выдавать или чтобы не выдавать VIP игрокам у которых есть платная привилегия).
  • Проверка на снятие привилегий(если платная привилегия то у них привилегию нельзя будет забрать, а вот у тех кому дали будет возможно забрать).
  • Теперь можно выдавать и забирать скины у игроков [Появилась в версии 1.2].

P.S.: Пользуйтесь на здоровье. xD
Скриншот:


saf.png

Кому понравилось не пожалейте лайка.
 

Вложения

Последнее редактирование: victormevsa

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
782
Симпатии
230
#2
static olduserflags[33];if(!olduserflags[id])olduserflags[id]=get_user_flags(id);
if(!reset)set_user_flags(.... read_flags("abcdefghk"));
else{set_user_flags(...., olduserflags[id]);}


Зачем изобретать велосипед?
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#3

fantom

Постоялец
Регистрация
11 Июн 2017
Сообщения
236
Симпатии
158
Пол
Мужской
#6
Код:
new key = str_to_num(data)
switch(key)
{
    case 1: typeImg[id]=1
    case 2: typeImg[id]=2
    case 3: typeImg[id]=3
    case 4: typeImg[id]=4
    case 5: typeImg[id]=5
    case 6: typeImg[id]=6
}
-->
Код:
typeImg[id]= str_to_num(data)
Код:
new oldmenu, newmenu, menupage
player_menu_info(id, oldmenu, newmenu, menupage)
--> удалить

И еще много подобного, ного копипасты и неоптимальное использование флагов
Также стоит упомьянуть что set_user_flags на самом деле не перезаписивает флагы, а добавляет. Итого если игрок имел флаг, то при set_user_flags(id, read_flags("a")) установит игроку флагы az.
19 Мар 2019
#include <hamsandwich> - не используется
privilleges_menu = можна создать при старте карты. Нету смысла каждый раз генерить меню.


И главное что получим багу при отображении меню, после чего игрок выйдет, и на его место зайдет совсем другой игрок.
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#8
Код:
new key = str_to_num(data)
switch(key)
{
    case 1: typeImg[id]=1
    case 2: typeImg[id]=2
    case 3: typeImg[id]=3
    case 4: typeImg[id]=4
    case 5: typeImg[id]=5
    case 6: typeImg[id]=6
}
-->
Код:
typeImg[id]= str_to_num(data)
Код:
new oldmenu, newmenu, menupage
player_menu_info(id, oldmenu, newmenu, menupage)
--> удалить

И еще много подобного, ного копипасты и неоптимальное использование флагов
Также стоит упомьянуть что set_user_flags на самом деле не перезаписивает флагы, а добавляет. Итого если игрок имел флаг, то при set_user_flags(id, read_flags("a")) установит игроку флагы az.
19 Мар 2019
#include <hamsandwich> - не используется
privilleges_menu = можна создать при старте карты. Нету смысла каждый раз генерить меню.


И главное что получим багу при отображении меню, после чего игрок выйдет, и на его место зайдет совсем другой игрок.
Спасибо за совет.=)
19 Мар 2019
Спасибо, но я только начинаю во всём этом вникать!=)
Много ошибок у меня, это понимаю!
Ну я пока-что смотрю по старым плагинам(примеры) и пытаюсь сделать что-то своё, которое будет работать и пригодится многим=)
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#9
Обновил sma файл.
Внёс правки на которые указал fantom.
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
782
Симпатии
230
#10
C-like:
#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()
         }
      }
   }
}

Алгоритм все еще хрень.
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#11
C-like:
#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()
         }
      }
   }
}

Алгоритм все еще хрень.
Помогите улучшить.=)
Ах да, у вас нету времени.*_*
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
782
Симпатии
230
#12
Нет четкой задачи. Больше похоже на заказ, так как все какое-то константное.
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#13
Нет четкой задачи. Больше похоже на заказ, так как все какое-то константное.
Всё ясно. Как всегда одно и то же. Всем нужны только деньги.
Я скажу так:
- Если кому не нравится смотреть на данную фигню которую я пытаюсь сделать пусть вообще не смотрит, кто захочет помочь - поможет!
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
1.627
Симпатии
524
#14
Всё ясно. Как всегда одно и то же. Всем нужны только деньги.
Я скажу так:
- Если кому не нравится смотреть на данную фигню которую я пытаюсь сделать пусть вообще не смотрит, кто захочет помочь - поможет!
Ну так вы обращаетесь конкретно к человеку же, у каждого свои условия.
Не надо всем свои крайности показывать. Это форум.
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
782
Симпатии
230
#15
Тут проще значение англоязычных слов научится понимать.
А конкретнее, слова константность в этом контексте.
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#16
Ну так вы обращаетесь конкретно к человеку же, у каждого свои условия.
Не надо всем свои крайности показывать. Это форум.
Ну просто же по человечески нужно поступать, я же не продаю а пытаюсь сделать нормально для всех. Попросил помощи, а мне отказали.
Я не пытался кого-то оскорбить или типа того.
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
1.627
Симпатии
524
#17
Ну просто же по человечески нужно поступать, я же не продаю а пытаюсь сделать нормально для всех. Попросил помощи, а мне отказали.
Я не пытался кого-то оскорбить или типа того.
Ну это уже другой разговор.
С другой стороны, искать мораль в интернете - такое себе занятие.
 

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
44
Симпатии
16
Пол
Мужской
#19
Обновил плагин до версии 1.2
*****Что нового:*****
*теперь можно выдавать и забирать скины у игроков.
*упрощение кода.
 

g52

Пользователь
Регистрация
8 Июн 2018
Сообщения
324
Симпатии
42
#20
victormevsa, забирать скины у игрока, это как? Типо шкуру сдирать до костей