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

    Регистрация:
    08.03.15
    Сообщения:
    1.423
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    Всем ку :)

    Нужно изменить под ДМ вип плагин.
    Чтобы меню было доступно с первого раунда + Авп и пулик тоже с первого раунда можно было брать.
    Добавить ограничение,чтобы оружие можно было брать 1 раз в 3 смерти,если такое возможно =)
    И допилить дамагер.

    Сам,что мог выпилил/изменил,далее прошу помощи :)
    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <cstrike>
    3. #include <fakemeta_util>
    4. #include <hamsandwich>
    5. #if AMXX_VERSION_NUM < 183
    6. #include <colorchat>
    7. #endif  
    8.  
    9. // #### Конфигурационные defines ####
    10. #define VIP_ACCESS ADMIN_LEVEL_A            // Флаг доступа VIP (по дефолту флаг "p" ADMIN_LEVEL_D)
    11. #define CHATTAG "^1[^4VIP^1]^3"         // Префикс перед сообщениями || ^1 - желтый ^3 - цвет команды ^4 - зеленый
    12. #define VIPROUND 3                            // C какого раунда можно открыть вип меню
    13. #define AWPM249RND 6                        // С какого раунда доступны AWP и пулемет
    14.  
    15. #define VIPAUTOGRENADE                        // Давать в начале каждого раунда гранаты
    16. // #### Конфигурационные defines ####
    17.  
    18. #define is_user_vip(%0) (get_user_flags(%0) & VIP_ACCESS)
    19.  
    20. new g_roundCount;
    21.  
    22. new bool:iUseWeapon[33], bool:bDefuse, bool:g_iBlockBonus;
    23.  
    24. new const PRIMARY_WEAPONS_BITSUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90);
    25. new const SECONDARY_WEAPONS_BITSUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE);
    26.  
    27. new bool:iUserVip[33];
    28.  
    29. public plugin_init()
    30. {
    31.     register_plugin("VIPka", "1.34", "neygomon");
    32.    
    33.     register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w");
    34.     register_event("HLTV","eRoundStart","a","1=0","2=0");
    35.  
    36.     if(engfunc(EngFunc_FindEntityByString,FM_NULLENT,"classname","func_bomb_target"))
    37.         bDefuse = true;
    38.        
    39.     RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1);
    40.    
    41.     register_clcmd("say /pv", "CmdMenu");
    42.     register_clcmd("premium_vip", "CmdMenu");
    43.     register_clcmd("say", "hook_say");
    44.     register_clcmd("say_team", "hook_say");
    45.    
    46.     register_menucmd(register_menuid("Vip Menu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "handler");
    47.  
    48. }  
    49.  
    50. public client_putinserver(id)
    51. {
    52.     if(!is_user_vip(id)) return;
    53.     static name[32]; get_user_name(id, name, charsmax(name));
    54.     client_print_color(0, 0, "%s ^1На сервер зашёл ^4VIP ^1клиент ^3%s", CHATTAG, name);
    55. }
    56.    
    57. public eRestart()
    58.     g_roundCount = 0;
    59.  
    60. public eRoundStart()
    61. {
    62.     g_roundCount++;
    63.    
    64.     arrayset(iUseWeapon, false, 33);
    65. }
    66.  
    67. public Player_Spawn(id)
    68. {
    69.     if(g_iBlockBonus || !is_user_alive(id)) return 0;
    70.    
    71.     if(is_user_vip(id)) iUserVip[id] = true;
    72.     else return iUserVip[id] = false;
    73.    
    74.     #if defined VIPAUTOGRENADE
    75.     fm_give_item(id, "weapon_hegrenade");
    76.     fm_give_item(id, "weapon_smokegrenade");
    77.     #endif
    78. }
    79.  
    80. public hook_say(id)
    81. {
    82.     static szMsg[128]; read_args(szMsg, 127); remove_quotes(szMsg);
    83.  
    84.     if(szMsg[0] != '/') return 0;
    85.  
    86.     static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" };
    87.     for(new a; a < sizeof szChoosedWP; a++)
    88.     {
    89.         if(!strcmp(szMsg, szChoosedWP[a]))
    90.         {
    91.             if(!is_allow_use(id)) break;
    92.             if(a > 2 && g_roundCount < AWPM249RND)
    93.                 return client_print_color(id, 0, "%s Данное оружие доступно только с^3 %d ^4раунда!", CHATTAG, AWPM249RND);
    94.             return handler(id, a);
    95.         }
    96.     }
    97.     return 0;
    98. }  
    99.  
    100. public CmdMenu(id)
    101. {
    102.     if(!is_allow_use(id)) return 0;
    103.    
    104.     static szMenu[512], iLen, iKey;
    105.  
    106.     iKey = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3;
    107.     iLen = formatex(szMenu, 511, "\yHTH \w[\r Мини Вип \w]^n^n\y1. \wВзять AK47^n\y2. \wВзять M4A1^n\y3. \wВзять Famas^n");
    108.  
    109.     if(g_roundCount < AWPM249RND)
    110.         iLen += formatex(szMenu[iLen], 511 - iLen, "\y4. \dВзять AWP \r[c %d раунда]^n\y5. \dВзять Пулемет \r[c %d раунда]^n^n", AWPM249RND, AWPM249RND);
    111.     else
    112.     {
    113.         iKey |= MENU_KEY_4|MENU_KEY_5;
    114.         iLen += formatex(szMenu[iLen], 511 - iLen, "\y4. \wВзять AWP^n\y5. \wВзять Пулемет^n^n");
    115.     }
    116.     formatex(szMenu[iLen], 511 - iLen, "\y0. \wВыход");
    117.     set_pdata_int(id, 205, 0);
    118.     return show_menu(id, iKey, szMenu, -1, "Vip Menu");
    119. }
    120.  
    121. public handler(id, iKey)
    122. {
    123.     if(iKey > 4 || iUseWeapon[id]) return 0;
    124.    
    125.     static const szChoosedBP[] = { 90, 90, 90, 30, 250 };
    126.     static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp", "weapon_m249" };
    127.  
    128.     iUseWeapon[id] = true;
    129.  
    130.     return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey], 1);
    131. }
    132.  
    133. stock give_item_ex(id,currWeaponName[],ammoAmount,dropFlag=0)
    134. {
    135.     static    weaponsList[32], weaponName[32], weaponsNum, currWeaponID;      
    136.     currWeaponID = get_weaponid(currWeaponName);
    137.     if(dropFlag)
    138.     {  
    139.         weaponsNum = 0;
    140.         get_user_weapons(id,weaponsList,weaponsNum);
    141.         for (new i;i < weaponsNum;i++)
    142.         {
    143.             if(((1 << currWeaponID) & PRIMARY_WEAPONS_BITSUM && (1 << weaponsList[i]) & PRIMARY_WEAPONS_BITSUM) | ((1 << currWeaponID) & SECONDARY_WEAPONS_BITSUM && (1 << weaponsList[i]) & SECONDARY_WEAPONS_BITSUM))
    144.             {
    145.                 get_weaponname(weaponsList[i],weaponName,charsmax(weaponName));
    146.                 engclient_cmd(id,"drop",weaponName);
    147.             }
    148.         }
    149.     }
    150.     fm_give_item(id,currWeaponName);
    151.     cs_set_user_bpammo(id,currWeaponID,ammoAmount);
    152.     return 1;
    153. }
    154.  
    155. bool:is_allow_use(id)
    156. {
    157.     if(!iUserVip[id])
    158.     {
    159.         client_print_color(id, 0, "%s Только ^4VIP-игрок ^3может пользоваться этой командой!", CHATTAG);
    160.         return false;
    161.     }
    162.     if(!is_user_alive(id))
    163.     {
    164.         client_print_color(id, 0, "%s Для использования данной команды вы должны быть ^4живы^3!", CHATTAG);
    165.         return false;
    166.     }
    167.     if(!g_roundCount)
    168.     {
    169.         client_print_color(id, 0, "%s Разминочный раунд. ^4Запрещено ^3пользоваться командой!", CHATTAG);
    170.         return false;
    171.     }
    172.     if(iUseWeapon[id])
    173.     {
    174.         client_print_color(id, 0, "%s Вы ^3уже брали ^4оружие в этом раунде!", CHATTAG);
    175.         return false;
    176.     }
    177.     if(g_roundCount < VIPROUND)
    178.     {
    179.         client_print_color(id, 0, "%s Оружия доступны только с^3 %d ^4раунда!", CHATTAG, VIPROUND);
    180.         return false;
    181.     }
    182.     return true;
    183. }
     
  2. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    844
    Симпатии:
    284
    Пол:
    Мужской
    Вырежи счётчик раунда g_roundCount, хукни спавн игрока и добавь счётчик туда и установи лимит :)
     
  3. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.684
    Симпатии:
    790
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    ThePhoenix,
    PHP:
    1. #include <amxmodx>
    2. #include <cstrike>
    3. #include <fakemeta_util>
    4. #include <hamsandwich>
    5. #if AMXX_VERSION_NUM < 183
    6. #include <colorchat>
    7. #endif
    8.  
    9. // #### Конфигурационные defines ####
    10. #define VIP_ACCESS ADMIN_LEVEL_A            // Флаг доступа VIP (по дефолту флаг "p" ADMIN_LEVEL_D)
    11. #define CHATTAG "^1[^4VIP^1]^3"         // Префикс перед сообщениями || ^1 - желтый ^3 - цвет команды ^4 - зеленый
    12.  
    13. #define VIPAUTOGRENADE                        // Давать в начале каждого раунда гранаты
    14. // #### Конфигурационные defines ####
    15.  
    16. #define is_user_vip(%0) (get_user_flags(%0) & VIP_ACCESS)
    17.  
    18. new bool:iUseWeapon[33], bool:g_iBlockBonus;
    19.  
    20. new const PRIMARY_WEAPONS_BITSUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90);
    21. new const SECONDARY_WEAPONS_BITSUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE);
    22.  
    23. new bool:iUserVip[33];
    24.  
    25. new g_deathcount;
    26.  
    27. public plugin_init()
    28. {
    29.     register_plugin("VIPka", "1.34", "neygomon");
    30.  
    31.     register_event("DeathMsg", "DeathCount", "a", "1>0")
    32.     register_event("HLTV","eRoundStart","a","1=0","2=0");
    33.        
    34.     RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1);
    35.    
    36.     register_clcmd("say /pv", "CmdMenu");
    37.     register_clcmd("premium_vip", "CmdMenu");
    38.     register_clcmd("say", "hook_say");
    39.     register_clcmd("say_team", "hook_say");
    40.    
    41.     register_menucmd(register_menuid("Vip Menu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "handler");
    42.  
    43. }  
    44.  
    45. public DeathCount()
    46.     g_deathcount++;
    47.  
    48. public client_putinserver(id)
    49. {
    50.     if(!is_user_vip(id)) return;
    51.     static name[32]; get_user_name(id, name, charsmax(name));
    52.     client_print_color(0, 0, "%s ^1На сервер зашёл ^4VIP ^1клиент ^3%s", CHATTAG, name);
    53. }
    54.  
    55. public eRoundStart()
    56.     arrayset(iUseWeapon, false, 33);
    57.  
    58. public Player_Spawn(id)
    59. {
    60.     if(g_iBlockBonus || !is_user_alive(id)) return 0;
    61.    
    62.     if(is_user_vip(id)) iUserVip[id] = true;
    63.     else return iUserVip[id] = false;
    64.    
    65.     #if defined VIPAUTOGRENADE
    66.    fm_give_item(id, "weapon_hegrenade");
    67.     fm_give_item(id, "weapon_smokegrenade");
    68.     #endif
    69.    return 1;
    70. }
    71.  
    72. public hook_say(id)
    73. {
    74.     static szMsg[128]; read_args(szMsg, 127); remove_quotes(szMsg);
    75.  
    76.     if(szMsg[0] != '/') return 0;
    77.  
    78.     static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" };
    79.     for(new a; a < sizeof szChoosedWP; a++)
    80.     {
    81.         if(!strcmp(szMsg, szChoosedWP[a]))
    82.         {
    83.             if(!is_allow_use(id)) break;
    84.             return handler(id, a);
    85.         }
    86.     }
    87.     return 0;
    88. }  
    89.  
    90. public CmdMenu(id)
    91. {
    92.     if(!is_allow_use(id)) return 0;
    93.     g_deathcount = 0;
    94.     static szMenu[512], iLen, iKey;
    95.  
    96.     iKey = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
    97.     iLen = formatex(szMenu, 511, "\yHTH \w[\r Мини Вип \w]^n^n\y1. \wВзять AK47^n\y2. \wВзять M4A1^n\y3. \wВзять Famas^n");
    98.     iLen += formatex(szMenu[iLen], 511 - iLen, "\y4. \wВзять AWP^n\y5. \wВзять Пулемет^n^n");
    99.     formatex(szMenu[iLen], 511 - iLen, "\y0. \wВыход");
    100.     set_pdata_int(id, 205, 0);
    101.     return show_menu(id, iKey, szMenu, -1, "Vip Menu");
    102. }
    103.  
    104. public handler(id, iKey)
    105. {
    106.     if(iKey > 4 || iUseWeapon[id]) return 0;
    107.    
    108.     static const szChoosedBP[] = { 90, 90, 90, 30, 250 };
    109.     static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp", "weapon_m249" };
    110.  
    111.     iUseWeapon[id] = true;
    112.  
    113.     return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey], 1);
    114. }
    115.  
    116. stock give_item_ex(id,currWeaponName[],ammoAmount,dropFlag=0)
    117. {
    118.     static    weaponsList[32], weaponName[32], weaponsNum, currWeaponID;      
    119.     currWeaponID = get_weaponid(currWeaponName);
    120.     if(dropFlag)
    121.     {  
    122.         weaponsNum = 0;
    123.         get_user_weapons(id,weaponsList,weaponsNum);
    124.         for (new i;i < weaponsNum;i++)
    125.         {
    126.             if(((1 << currWeaponID) & PRIMARY_WEAPONS_BITSUM && (1 << weaponsList[i]) & PRIMARY_WEAPONS_BITSUM) | ((1 << currWeaponID) & SECONDARY_WEAPONS_BITSUM && (1 << weaponsList[i]) & SECONDARY_WEAPONS_BITSUM))
    127.             {
    128.                 get_weaponname(weaponsList[i],weaponName,charsmax(weaponName));
    129.                 engclient_cmd(id,"drop",weaponName);
    130.             }
    131.         }
    132.     }
    133.     fm_give_item(id,currWeaponName);
    134.     cs_set_user_bpammo(id,currWeaponID,ammoAmount);
    135.     return 1;
    136. }
    137.  
    138. bool:is_allow_use(id)
    139. {
    140.     if(!iUserVip[id])
    141.     {
    142.         client_print_color(id, 0, "%s Только ^4VIP-игрок ^3может пользоваться этой командой!", CHATTAG);
    143.         return false;
    144.     }
    145.     if(!is_user_alive(id))
    146.     {
    147.         client_print_color(id, 0, "%s Для использования данной команды вы должны быть ^4живы^3!", CHATTAG);
    148.         return false;
    149.     }
    150.     if(iUseWeapon[id])
    151.     {
    152.         client_print_color(id, 0, "%s Вы ^3уже брали ^4оружие в этом раунде!", CHATTAG);
    153.         return false;
    154.     }
    155.     if(g_deathcount <= 3)
    156.     {
    157.         client_print_color(id, 0, "%s Вы ^3не можете брать ^4оружие чаще, чем раз за три смерти!", CHATTAG);
    158.         return false;
    159.     }
    160.     return true;
    161. }
     
    ThePhoenix нравится это.
  4. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    844
    Симпатии:
    284
    Пол:
    Мужской
    Изян есть, меню работать не будет, но по команде hook_say нет ограничения. :)
     
  5. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.684
    Симпатии:
    790
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    pUzzlik, поясни
     
  6. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    844
    Симпатии:
    284
    Пол:
    Мужской
    Ну менюшка public CmdMenu вызываеться g_deathcount <= 3 И в меню ты счетчик обнуляешь g_deathcount = 0; Но есть еще public hook_say тоесть если верно понимать то я смогу брать через чат,
    Код (Unknown Language):
    1. static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" };
    от тут и изьян, если я не буду использовать
    Код (Unknown Language):
    1. register_clcmd("say /pv", "CmdMenu");
    2. register_clcmd("premium_vip", "CmdMenu");
    То счётчик не обнулиться :) Верно?
    --- добавлено 17.02.16 ---
    кр4 забыл обнулить счетчик g_deathcount в public hook_say
    --- добавлено 17.02.16 ---
    А так то все хорошо должно быть :)
     
    Phantom нравится это.
  7. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.684
    Симпатии:
    790
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    pUzzlik, понял. Я просто не знал, что тут через чат сразу можно взять оружие: не пользовался данной випкой
     
  8. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.423
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    так можно через чат выпилить =)
    --- добавлено 17.02.16 ---
    А дамагер,кто смогёт засунуть?
    А то я пробовал с vip_acc ручки скривились и не вышло :D
     
  9. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    844
    Симпатии:
    284
    Пол:
    Мужской
    А разви нет у етой версии дамагера?
     
  10. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.423
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    Неа
     
  11. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    844
    Симпатии:
    284
    Пол:
    Мужской
    А чё тогда у меня на сервере стоит и у меня есть, ты наверно вырезал для паблика его, а теперь опять назад всунуть хочешь :D
     
  12. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.423
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    Лол да вроде не резал,проверю))